Attention, je suis assez nouveau pour Prolog. J'ai écrit un prédicat de split dans Prolog. Il divise une liste en deux nouvelles listes. Un qui contient des éléments plus grands que Key, et un qui contient des éléments inférieurs ou égaux à Key. Il devrait seulement retourner une série de réponses. Le problème est si je tape; pour vérifier plus de réponses, il continue à me donner la réponse que j'ai déjà reçue et puis finalement l'auditeur plante. Je me demandais si vous pouviez m'aider à résoudre ce problème?Donner la même réponse encore et encore, que les plantages de l'écouteur - Prolog
code:
split([],_,[],[]).
split([H|T],Key,Small,Big):-
H=<Key,
removeFirst(Small,H,NewSmall),
split(T,Key,NewSmall,Big).
split([H|T],Key,Small,Big):-
H>Key,
removeFirst(Big,H,NewBig),
split(T,Key,Small,NewBig).
removeFirst([H|T],H,T).
removeFirst(L,Key,Result):-
divide(L,Key,F,E),
X = F,
Y = E,
append(X,Y,Z),
Result = Z.
Sortie:
?- split([1,2,3,4,5],3,S,B).
S = [1, 2, 3]
B = [4, 5] ;
S = [1, 2, 3]
B = [4, 5] ;
S = [1, 2, 3]
B = [4, 5] ;
Listener se bloque sur 4 tentative.
+1; c'est comme ça que j'irais aussi écrire un tel prédicat. Si vous ne voulez pas utiliser cut ('!') Pour la pureté, il suffit simplement de laisser le test 'Item> Key' en tant que premier sous-objectif de la dernière clause de' split/4' comme l'OP avait initialement. – sharky