我正在做作业需要实现关系list_merge(X,Y,Z),其中X和Y是整数列表,Z包含来自X和Y的所有元素,并且Z中没有重复。
我知道如何实现追加功能并删除重复功能。
追加
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).
但我不知道如何将这两个关联组合在一个关系中,这样我可以在合并两个列表后删除重复项。如何组合关系或任何其他可以产生相同效果的方法。
一些示例输入和输出:
?- 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] .
答案 0 :(得分:-1)
好吧,首先将两个列表附加到中间结果,然后从该中间结果中删除重复项以获得最终结果。
list_merge(X, Y, Z) :-
append2(X, Y, Z1),
remdups(Z1, Z).