J'essaie de mettre en œuvre une routine de différence de liste dans Prolog. Pour une raison quelconque, ce qui suit échoue:
ERROR: '.'/2: Type error: `[]' expected, found `1' ("x" must hold one character) ^ Exception: (10) _L161 is [2|1] ?
4 Réponses :
Utiliser Trouver toute la solution devient évident:
difference(Xs,Ys,D) :- findall(X,(member(X,Xs),not(member(X,Ys))),D).
Votre utilisation A1 est [x | a] est incorrecte. Le prédicat 1 ?- subtract([1,2,3,a,b],[2,a],R).
R = [1, 3, b].
2 ?- listing(subtract).
subtract([], _, []) :- !.
subtract([A|C], B, D) :-
memberchk(A, B), !,
subtract(C, B, D).
subtract([A|B], C, [A|D]) :-
subtract(B, C, D).
true.
minus([1,2,3,4,3], [1,3], L). output: L=[2,4]
always (subtructLists(List, [Head|Rest], Result): - ( delete_element(Head, List, Subtructed) , ! , subtructLists(Subtructed, Rest, Result) ) ; ( subtructLists(List, Rest, Result) ) ). always (subtructLists(List, [], List)). always( delete_element(X, [X|Tail], Tail)). always( delete_element(X, [Y|Tail1], [Y|Tail2]): - delete_element(X, Tail1, Tail2) ).