2016-05-12 91 views
1

所以我有以下断言其随机插入一个项目到一个列表给出多种解决方案:使用特定的谓词打乱Prolog中的元素列表?

insert(X,Y,Z):- append(A,B,X),append(A,[Y|B],Z). 

我想写另一个谓词这打乱在列表中的元素,并返回多种解决方案。我知道有一个名为random_permutation的库函数,但我想知道如何根据我自己的谓词编写它?

我尝试以下,但它似乎无可救药地错了:那么用这个谓词我可以输入置换([1,2,3],X)

permute([],[]). 
permute(X,Y):-insert(X,_,Z),permute(Z,Y). 

。并返回结果[1,3,2],[2,3,1]等....例如。

谢谢。

回答

1

试试这个

permute([],[]). 
permute([X|Xs],Y) :- permute(Xs,P), insert(P,X,Y). 
+0

完美的作品!非常感谢! – Cypher236