Prolog 序言丢弃置换
我无法放弃重复排列。例如,我想Prolog 序言丢弃置换,prolog,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] ; .我认为更简单的方法是 perm_no_rep(L,
?-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] ;
.我认为更简单的方法是
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].
请注意,这将是阶乘(Num\u Distinct\u Elements\u in\u L)=长度(Ps)
,即可能是非常大的列表