prolog - Prolog 中的数字递增

标签 prolog increment

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

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).

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

最佳答案

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

然后,为了帮助您解决就地递增变量的原始问题:您无法在 Prolog 中执行此操作。一旦变量被绑定(bind),您就无法更改其绑定(bind)。在 Prolog 中编程时,您必须考虑 relations和递归,而不是可变状态。下面是如何在 Prolog 中递增:

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

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

关于prolog - Prolog 中的数字递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216695/

相关文章:

Prolog 程序能够找到三个连续和重复的值

prolog - 遍历整个列表并检查 Prolog 中是否存在项目

prolog - 了解 Prolog 中的列表和递归

programming-languages - 语言是否需要 preIncrement (++x) 和 postIncrement (x++)

Python-根据 2 个列表中的增量值添加到字典

Java-每当在 JList 中选择文件时,如何递增变量?

c++ - 当将参数传递给 sscanf 时,为什么不在指针工作 "correctly"上发布增量

Prolog:md5 谓词

prolog - 如果标签大于 0,Gerrit 允许提交(序言规则)

Java score积分自动递增