一个简单的prolog语法问题

时间:2011-01-26 00:11:56

标签: prolog

在SWI-Prolog的用户模式中,我按如下方式定义了一个函数:

|: test1(+X,+Y) :- X >= 0, X =:= Y.

现在处于查询模式:

?- test1(1, 1).
false.

我希望这会返回“true”,因为1大于0而1等于1.

那我哪里出错了?

1 个答案:

答案 0 :(得分:5)

这就是你想要的:

test1(X,Y) :- X >= 0, X =:= Y.

然后:

?- test1(1, 1).
true.

添加+, - 和?在谓词参数前面不是Prolog的一部分。它只是一个记录如何使用谓词的惯例。

以下是GNU-prolog documentation所说的内容:

  

该模式指定在调用内置谓词时是否必须实例化参数。模式在类型之前用符号编码。可能的模式是:

     
      
  • +:必须实例化参数。
  •   
  • - :参数必须是变量(如果内置谓词成功,将实例化)。
  •   
  • ?:可以实例化参数或变量。
  •   

在实际代码中,您不应在参数前加上+。