我一直在尝试写一些代码,需要值的列表,并删除其中仅在列表中一次,不重复的所有值:序言除去非复制
dbltaker([], []).
dbltaker([H | X], Y):-
\+mem(H, X),
dbltaker(X, Y).
dbltaker([H | X], [H | Y]):-
mem(H, X), !,
dbltaker(X, Y).
dbltaker([H | X], [H | Y]):-
mem(H, Y),
dbltaker(X, Y).
mem(H, [H | _]).
mem(H, [_ | T]):-
mem(H, T).
麻烦我一直有的是,在将非重复移动到另一个列表后,它的重复不再是重复的,因此不会移动到列表中。例如,列表[1,1,1,2,2,3]给出[1,1,2]作为输出,因为最后一个和两个不被认为是重复的,因为它们不再是它们的成员尾巴,我无法检查它们是否是新列表的成员,因为它尚未实例化。
有没有办法解决这个问题?
谢谢。
这是一个赋值/什么限制,你有 - 你允许使用例如。 nth1或其他列表/设置相关的内置插件,或者像findall/setof这样的收藏夹? – magus
限制是算术和削减以外的其他内置函数。 – Qiri
[Prolog只能删除唯一元素]的可能的重复(http://stackoverflow.com/questions/21971037/prolog-removing-unique-elements-only) – lurker