【发布时间】:2014-12-08 02:52:28
【问题描述】:
我正在尝试列出从 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).
【问题讨论】:
-
@false 您找到了一个非常接近的副本。我投票决定将此问题作为重复问题结束。
-
好的。不过,这个问题是更好的问题之一。
-
@false 但我想在这里使用我的代码并将所有内容都列出到一个列表中,而不是使用内置的排列谓词
标签: list prolog permutation