的列表中删除列表中的排列假设我有列表在序言中,如何从列表
L= [[1,2,3], [3,2,1],[2,1,2],[3,1,2], [1,2,2]].
,你可以看到,[1,2,3]
,[3,2,1]
和[3,1,2]
互为排列的列表。 [2,1,2]
和[1,2,2]
也是彼此的置换。
我的目标是删除列表中所有元素的排列。 结果列表应该是:
L'=[[1,2,3],[2,1,2]].
我的想法到目前为止是利用成员(X,L),以在列表中找到一个元素,那么使用permutation(X,Xperm)
获得的X
置换,然后检查是否Xperm
是在L
,如果是的话,删除它。
然而,结果不是我想要的。
任何人都可以帮助我吗?
如果L = [[0,0,1],[0,1,1]],remove_dups给了我X = [[0,1,1]]。这是不对的。是否因为SWI-prolog的排序会删除重复项?例如在我的序言实现中,sort([0,0,1])= [0,1]。 – user2683732
@ user2683732你说得对,我错过了那部分。 'sort/2'确实会删除重复项。切换到'msort/2'来避免这种行为。 – dasblinkenlight