我正在尝试在prolog中实现增量,并编写了以下代码:
coordenate(X,Y,Z):-
X is 1,
Y is 1,
Z is 1,
coordenate(X1,Y1,Z1),
X1 is X+1,
Y1 is Y+1,
Z1 is Z.
我也试过了:
coordenate(X,Y,Z):-
X is 1,
Y is 1,
Z is 1,
coordenate(X+1,Y+1,X+1).
这些都不奏效。任何人都可以解释原因吗?
答案 0 :(得分:9)
两个程序都不起作用,因为它们包含无限递归。你可以在没有停止条件的情况下调用coordenate
。
然后,为了帮助您解决原地增加变量的原始问题:您无法在Prolog中执行此操作。绑定变量后,您无法更改其绑定。在Prolog中编程时,你必须考虑relations和递归,而不是可变状态。以下是Prolog增量的方法:
incr(X, X1) :-
X1 is X+1.
请注意,需要两个变量:一个用于保存原始值,另一个用于增量值。要对此谓词执行的计算执行任何有用的操作,两个变量都必须是谓词的参数。第一个用作输入参数,第二个用作输出参数(虽然这没有反映在语言中,但它遵循is/2
的工作方式)。