所以我有以下谓词,它随机地将一个项目插入到列表中以提供多个解决方案:
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]等....例如。
感谢。
答案 0 :(得分:1)
试试这个
permute([],[]).
permute([X|Xs],Y) :- permute(Xs,P), insert(P,X,Y).