0

我一直无法丢弃重复排列。例如,我想得到

?-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] ;

.

4

1 回答 1

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)即可能非常大的列表。

于 2013-03-23T21:22:52.303 回答