我无法丢弃重复排列。例如,我想得到
?-permutation([1,2,1],L).
L = [1, 2, 1] ;
L = [1, 1, 2] ;
L = [2, 1, 1] ;
。 但我得到了
?-permutation([1,2,1],L).
L = [1, 2, 1] ;
L = [1, 1, 2] ;
L = [2, 1, 1] ;
L = [2, 1, 1] ;
L = [1, 1, 2] ;
L = [1, 2, 1] ;
答案 0 :(得分:1)
我认为更简单的方法可能是
perm_no_rep(L, P) :-
setof(P, permutation(L, P), Ps),
member(P, Ps).
几乎可以:
?- perm_no_rep([1,2,1],P).
P = [1, 1, 2] ;
P = [1, 2, 1] ;
P = [2, 1, 1].
请注意,这将是factorial(Num_Distinct_Elements_in_L) = length(Ps)
,即可能是非常大的列表。