0
我对自己感到困惑,如果有人能指引我朝着正确的方向,这将会很有帮助。我需要从嵌套列表中获取重复项。我想我可以简单地找出如何从常规列表中找出重复的东西,然后制定一个获取子集的规则,然后以某种方式将它们组合起来,它会起作用,但我认为我通过这样做会让自己更加困惑。嵌套列表重复
这是我到目前为止,它删除重复罚款。
删除重复:
duplicate([],[]).
duplicate([H|T],C) :- var(H,T),!, duplicate(T,C).
duplicate([H|T],[H|C]) :- duplicate(T,C).
var(X,[H|_]) :- X==H,!.
var(X,[_|T]) :- var(X,T).
子集规则:
subset([],_).
subset([H|T],L):- member(H,L),subset(T,L).
目前如果我叫duplicate([1,2,2,3,4,a,a,a,b,b,b], X).
它会返回X = [1,2,3,4a,b]
这是正确的,但我希望能够调用duplicate([1,[2,[2,[1,[a,[a]]]]]], X).
,并使其返回X = [1,2,a]
我的思维过程是正确的还是我错误地想到了这一点?
反正有没有包括在该规则,以便用户该过程可以调用'duplicate([1,[2,[2,[1,[a,[a]]]]]],L).'? – user3646479
@ user3646479是的。将你的'duplicate'重命名为'duplicate_flatten'并且定义'duplicate(X,Y): - flatten(X,L),duplicate_flatten(L,Y).' –