排列序言 [英] Permutation Prolog
问题描述
我正在尝试列出所有从1到N的排列的列表*列表
I am trying to make a list*list of all permutations from 1 to N
示例:perm(3,X). -> X = [[1、2、3],[1、3、2],[2、1、3],[2、3、1],[3、1、2],[3、2 1]]
Example: 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, 2, 3]
X = [1、3、2]
X = [1, 3, 2]
X = [2,1,3]
X = [2, 1, 3]
X = [2,3,1]
X = [2, 3, 1]
X = [3,1,2]
X = [3, 1, 2]
X = [3,2,1]
X = [3, 2, 1]
,接下来必须继续点击.我的问题是如何将X的所有值放入列表,就像我想要的示例运行一样.这是我现有的代码:
and having to keep hitting next. My question is how would I put all values of X into a list like the example run that I want. Here is my existing code:
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).
推荐答案
perm(N, X):-
createList(N, [], L),
list_allperms(L, X).
在另一个答案中定义了 list_allperms/2
.
With list_allperms/2
defined in another answer.
您所说的permHelp
应该更称为permutation
.
这篇关于排列序言的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!