我是一名学生在学习prolog。我已经用两种方式编写了一个从列表中删除重复元素的函数。一个保留元素的顺序,一个不保留元素的顺序。问题是我保留订单的输出,它包含对未绑定变量的引用?
保留订单:
rmDup([], R) :- !.
rmDup([A | L], R) :-
member(A, R), !,
rmDup(L, R).
rmDup([A | L], [A | L2]) :-
rmDup(L, L2).
?- rmDup([a,b,c,c,a,d,a], W).
W = [a,b,c,d|_A] ? ;
不保留订单:
rmDup([],[]).
rmDup([A|S1],S2) :- member(A, S1), rmDup(S1, S2),!.
rmDup([A|S1],[A|S2]) :- rmDup(S1, S2).
rmDup([a,b,c,c,a,d,a], W).
W = [b,c,d,a] ? ;
现在,我可以在两个函数之间看到的唯一重要区别是成员的参数。我认为R
为空的情况值得考虑,但我在编写它时遇到了问题。
rmDup([A | L], []) :- add A to empty List
是我想写的,但我不知道怎么做。
因此,总结一下,如何摆脱第一个函数输出中该死的|_A
?