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 に答える