用Prolog比较两个列表,并在不同的列表中收集不同的元素
我是Prolog编程语言的新手,我正在尝试学习列表结构。我想将列表A和列表B进行比较,找出A列表中不在B列表中的所有元素,然后写入列表C。谢谢 示例查询用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
匹配([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]