将两个列表与Prolog进行比较,并在不同的列表中收集不同的元素

时间:2019-05-11 09:25:53

标签: prolog

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

示例查询

HttpErrorException

预期

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

我能够比较两个列表,并找到“ true”为“ false”。有了这段代码。

L3=[d,e,f,g]

1 个答案:

答案 0 :(得分:2)

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

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]