Prolog 序言:删除合并列表的重复项

Prolog 序言:删除合并列表的重复项,prolog,Prolog,我正在做一个家庭作业,需要实现一个关系列表_mergex,Y,Z,其中X和Y是整数列表,Z包含X和Y中的所有元素,Z中没有重复项 我知道如何实现append函数和remove duplicates函数 附加 append2([X|A],B,[X|C]):-!,append(A,B,C). append2([],B,B). 删除重复项 delete(X,[],[]). delete(X,[X|T],R) :- delete(X,T,R). delete(X,[H|T],[H|R]) :- not

我正在做一个家庭作业,需要实现一个关系列表_mergex,Y,Z,其中X和Y是整数列表,Z包含X和Y中的所有元素,Z中没有重复项

我知道如何实现append函数和remove duplicates函数

附加

append2([X|A],B,[X|C]):-!,append(A,B,C).
append2([],B,B).
删除重复项

delete(X,[],[]).
delete(X,[X|T],R) :- delete(X,T,R).
delete(X,[H|T],[H|R]) :- not(X = H), delete(X,T,R).

remdups([],[]).
remdups([H|T],[H|R]) :- delete(H,T,S), remdups(S,R).
但我不知道如何在一个关系中组合这两个relation,以便在合并两个列表后删除重复项。我如何组合关系或任何其他具有相同效果的方法

一些示例输入和输出:

?- list_merge([],[],L).
L = [].
?- list_merge([1],[1],L).
L = [1].
?- list_merge([],[1,3,1,1,1],L).
L = [1, 3] .
?- list_merge([5,3,1,2,1],[7,3,2,5,7],L).
L = [5, 7, 3, 2, 1] .

首先,将两个列表附加到一个中间结果,然后从该中间结果中删除重复项以获得最终结果

list_merge(X, Y, Z) :-
    append2(X, Y, Z1),
    remdups(Z1, Z).

在appendor返回的列表上调用remdups如果列表是有序的,并且您在它们之间进行了适当的合并,这不是更干净吗?