用Prolog比较两个列表,并在不同的列表中收集不同的元素

用Prolog比较两个列表,并在不同的列表中收集不同的元素,prolog,Prolog,我是Prolog编程语言的新手,我正在尝试学习列表结构。我想将列表A和列表B进行比较,找出A列表中不在B列表中的所有元素,然后写入列表C。谢谢 示例查询 匹配([a,b,c,d,e,f,g],[a,b,c],L3) 期望 L3=[d,e,f,g] 我能够比较两个列表,发现“真”是“假”。用这个代码 match([Head|Tail], List2):- memberchk(Head,List2). match([_|Tail],List2):- match(Tail,List2

我是Prolog编程语言的新手,我正在尝试学习列表结构。我想将列表A和列表B进行比较,找出A列表中不在B列表中的所有元素,然后写入列表C。谢谢

示例查询

匹配([a,b,c,d,e,f,g],[a,b,c],L3)

期望

L3=[d,e,f,g]
我能够比较两个列表,发现“真”是“假”。用这个代码

match([Head|Tail], List2):-
    memberchk(Head,List2).
match([_|Tail],List2):-
    match(Tail,List2).

所以,有两种方法。第一个是编写自己的谓词:

my_subtract([],_,[]):- !.
my_subtract([H|T],B,[H|T1]):-
    \+member(H,B), !,
    my_subtract(T,B,T1).
my_subtract([H|T],B,[H1|T1]):-
    member(H,B), !,
    my_subtract(T,B,[H1|T1]).

test:-
    LA = [a,b,c,d,e,f,g],
    LB = [a,b,c],
    my_subtract(LA,LB,LO1),    
    writeln(LO1).

?- test.
[d, e, f, g]
否则,您可以在SWI Prolog中使用谓词
subtract/3

test:-
    LA = [a,b,c,d,e,f,g],
    LB = [a,b,c],
    subtract(LA, LB, LO),    
    writeln(LO).

?- test.
[d, e, f, g]

所以,有两种方法。第一个是编写自己的谓词:

my_subtract([],_,[]):- !.
my_subtract([H|T],B,[H|T1]):-
    \+member(H,B), !,
    my_subtract(T,B,T1).
my_subtract([H|T],B,[H1|T1]):-
    member(H,B), !,
    my_subtract(T,B,[H1|T1]).

test:-
    LA = [a,b,c,d,e,f,g],
    LB = [a,b,c],
    my_subtract(LA,LB,LO1),    
    writeln(LO1).

?- test.
[d, e, f, g]
否则,您可以在SWI Prolog中使用谓词
subtract/3

test:-
    LA = [a,b,c,d,e,f,g],
    LB = [a,b,c],
    subtract(LA, LB, LO),    
    writeln(LO).

?- test.
[d, e, f, g]