增加prolog中的数字

时间:2011-11-21 18:32:35

标签: prolog increment

我正在尝试在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).

这些都不奏效。任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:9)

两个程序都不起作用,因为它们包含无限递归。你可以在没有停止条件的情况下调用coordenate

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

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

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