我正在尝试在序言中实现增量,并编写了以下代码:
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/