增加prolog中的数字

Ber*_*tiz 4 increment prolog

我正在尝试在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.
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

coordenate(X,Y,Z):-
          X is 1,
          Y is 1,
          Z is 1,
          coordenate(X+1,Y+1,X+1).
Run Code Online (Sandbox Code Playgroud)

这些都不奏效.有谁能解释为什么?

Fre*_*Foo 9

这两个程序都不起作用,因为它们包含无限递归.你coordenate自己打电话,没有停止条件.

然后,为了帮助您解决原地增加变量的原始问题:您无法在Prolog中执行此操作.绑定变量后,您无法更改其绑定.在Prolog中编程时,你必须考虑关系和递归,而不是可变状态.以下是Prolog中增量的方法:

incr(X, X1) :-
    X1 is X+1.
Run Code Online (Sandbox Code Playgroud)

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