使用特定谓词加扰Prolog中的元素列表?

时间:2016-05-12 18:44:02

标签: prolog

所以我有以下谓词,它随机地将一个项目插入到列表中以提供多个解决方案:

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

我想编写另一个谓词,它会对列表中的元素进行加扰并返回多个解决方案。我知道有一个名为random_permutation的库函数,但是我想知道如何基于我自己的谓词编写它?

我尝试了以下但是看起来毫无可救:

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

所以使用这个谓词我可以输入permute([1,2,3],X)。并返回结果[1,3,2],[2,3,1]等....例如。

感谢。

1 个答案:

答案 0 :(得分:1)

试试这个

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