2
我試圖列出所有排列從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).
請參閱[這個答案](http://stackoverflow.com/a/8394843/772868) – false 2014-12-08 02:54:27
可能重複[置換到列表SWI-Prolog](http://stackoverflow.com/questions/8385423/permute -int-a-list-swi-prolog) – dasblinkenlight 2014-12-08 02:55:58
@false你發現了一個非常接近的副本。我投票結束這個問題的重複。 – dasblinkenlight 2014-12-08 02:57:50