Prolog从列表中删除多个元素

MaX*_*X99 5 list prolog

我知道如何从列表中删除元素但是有没有办法从列表中删除多个元素?例如,

deletelist([a,b,c,a,b],[a,c],X)
X = [b,b] % delete a and c from the list.
Run Code Online (Sandbox Code Playgroud)

Kaa*_*rel 5

SWI-Prolog提供subtract/3:

?- subtract([a,b,c,a,b], [a,c], X).
X = [b, b].

?- listing(subtract).
lists:subtract([], _, []) :- !.
lists:subtract([A|C], B, D) :-
    memberchk(A, B), !,
    subtract(C, B, D).
lists:subtract([A|B], C, [A|D]) :-
    subtract(B, C, D).
Run Code Online (Sandbox Code Playgroud)


pad*_*pad 3

要删除多个元素,我们检查一个元素是否在第二个列表中,并在条件为真时将其删除:

deletelist([], _, []).                  
deletelist([X|Xs], Y, Z) :- member(X, Y), deletelist(Xs, Y, Z), !.
deletelist([X|Xs], Y, [X|Zs]) :- deletelist(Xs, Y, Zs).
Run Code Online (Sandbox Code Playgroud)