List 置换序曲

List 置换序曲,list,prolog,permutation,List,Prolog,Permutation,我正在尝试制作一个从1到N的所有排列的列表 示例:perm(3,X)。->X=[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 相反,我得到的是 X=[1,2,3] X=[1,3,2] X=[2,1,3] X=[2,3,1] X=[3,1,2] X=[3,2,1] 还要继续打下一个。我的问题是如何将X的所有值放入一个列表中,就像我想要的示例运行一样。以下是我现有的代码: permHelp([],[]). permHelp(List,[H|Fini

我正在尝试制作一个从1到N的所有排列的列表

示例:perm(3,X)。->X=[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

相反,我得到的是

X=[1,2,3]

X=[1,3,2]

X=[2,1,3]

X=[2,3,1]

X=[3,1,2]

X=[3,2,1]

还要继续打下一个。我的问题是如何将X的所有值放入一个列表中,就像我想要的示例运行一样。以下是我现有的代码:

permHelp([],[]).
permHelp(List,[H|Finish]):-delete(H,List,Rest),permHelp(Rest,Finish).

delete(X,[X|T],T).
delete(X,[H|T],[H|NT]):-delete(X,T,NT).

createList(0, L, L) :- !.
createList(N, R, L) :- N > 0, N1 is N-1, createList(N1, [N|R], L).

perm(N, X):- createList(N, [], L), permHelp(L, X).
在另一个答案中有定义


您所称的
permHelp
应该称为
permutation

查看@false的可能重复项您发现了一个非常接近的重复项。我投票结束这个问题作为一个重复。好的。尽管如此,这个问题还是比较好的。@false,但我想在这里使用我的代码,将所有内容都列在一个列表中,而不是使用内置的置换谓词
perm(N, X):-
   createList(N, [], L),
   list_allperms(L, X).