Prolog简单函数从列表中删除重复项

时间:2015-04-16 01:38:48

标签: prolog

我是一名学生在学习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

0 个答案:

没有答案