【问题标题】:Permutation Prolog排列序言
【发布时间】: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


【解决方案1】:
perm(N, X):-
   createList(N, [], L),
   list_allperms(L, X).

在另一个答案中定义了list_allperms/2

你称之为permHelp的东西应该被称为permutation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 2017-12-30
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多