Prolog丢弃排列

时间:2013-03-23 21:04:57

标签: prolog

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

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

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