【问题标题】:Incrementing numbers in PrologProlog中的递增数字
【发布时间】:2012-01-03 05:45:52
【问题描述】:

我正在尝试在 prolog 中实现增量,并编写了以下代码:

coordinate(X,Y,Z):- 
           X is 1, 
           Y is 1,
           Z is 1, 
           coordinate(X1,Y1,Z1), 
           X1 is X+1, 
           Y1 is Y+1, 
           Z1 is Z.

我也试过了:

coordinate(X,Y,Z):-
          X is 1,
          Y is 1,
          Z is 1,
          coordinate(X+1,Y+1,X+1).

这些都不起作用。谁能解释一下为什么?

【问题讨论】:

  • 拼写为坐标。
  • 请用“不工作”进行更详细的描述。它不是编译,给出错误的结果,进入无限循环,吃掉你的小猫吗?我们不是读心编译器,也不知道坐标谓词应该做什么
  • 你的代码的目的是什么?现在它将陷入无限递归。为我们提供更广泛的背景,以便我们了解您的问题
  • 对不起,我的代码不起作用,它编译但不起作用,当我运行它时,我必须使用break停止它。

标签: prolog increment


【解决方案1】:

这两个程序都不起作用,因为它们包含无限递归。您在其内部调用coordenate,没有停止条件。

然后,帮助您解决就地递增变量的原始问题:您不能在 Prolog 中这样做。一旦一个变量被绑定,你就不能改变它的绑定。在 Prolog 中编程时,您必须考虑relations 和递归,而不是可变状态。下面是如何在 Prolog 中递增:

incr(X, X1) :-
    X1 is X+1.

请注意,需要两个变量:一个用于保存原始值,一个用于增量值。要对该谓词执行的计算做任何有用的事情,两个变量都必须是谓词的参数。第一个作为输入参数,第二个作为输出参数(虽然这没有反映在语言中,它遵循is/2 的工作方式)。

【讨论】:

  • 所以我陷入了一个无限循环,我需要一个保存该值的变量,以及一个进行增量的变量。感谢您的解释。 =)
猜你喜欢
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多