排列序言 [英] Permutation Prolog

查看:83
本文介绍了排列序言的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试列出所有从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆