【问题标题】:Generating permutations of X and Y in Prolog在 Prolog 中生成 X 和 Y 的排列
【发布时间】:2014-12-08 05:43:38
【问题描述】:

基本上我有一个谓词对(Z,X,Y)

我想输出从 0 到 Z 的所有 X 和 Y 对

例如,我希望电话看起来像

pair(3,X,Y).
X=0
Y=0;

X=0
Y=1;

X=0
Y=2;

X=0
Y=3;

X=1
Y=0;

X=1
Y=1;
...
X=3
Y=3;

目前为止

pair(_,0,0).

pair(Z,X,Y) :-
  ...
  pair(S,X2,Y2)
  ...

我是 Prolog 的新手,所以我不确定如何填写由 ... 分隔的区域 我认为我应该做的是说一些类似的东西 (在伪代码中) "如果 Y2 = S 那么说 X 是 X1 + 1 并且 Y 是 0"

或者类似的东西。 但这似乎是一种非常迂回的做事方式。所以我想知道是否有更优雅的方式。

【问题讨论】:

    标签: prolog permutation


    【解决方案1】:

    更简单的方法是使用内置谓词between/3

    pair(S, X, Y):-between(0, S, X), between(0, S, Y).
    

    编辑:

    如果您想按照您所说的顺序构建对,您可以尝试以下方法:

    pair(_, 0, 0).
    pair(S, X, Y):- pair(S, X1, Y1),
                    (
                     S =:= Y1, (S =:= X1, !, false ; X is X1 + 1, Y is 0)
                    ;
                     S =\= Y1, X is X1, Y is Y1 + 1
                    ).
    

    因此,给定一对(X1, Y1),您可以使用您描述的规则推断下一个(X, Y)。如果Y1 等于S,那么如果X1 也等于S,则您要么终止执行,要么生成(X1+1, 0) 对。如果Y1不等于S,那么你推断(X1, Y1+1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多