在SWI-Prolog的用户模式中,我按如下方式定义了一个函数:
|: test1(+X,+Y) :- X >= 0, X =:= Y.
现在处于查询模式:
?- test1(1, 1).
false.
我希望这会返回“true”,因为1大于0而1等于1.
那我哪里出错了?
答案 0 :(得分:5)
这就是你想要的:
test1(X,Y) :- X >= 0, X =:= Y.
然后:
?- test1(1, 1).
true.
添加+, - 和?在谓词参数前面不是Prolog的一部分。它只是一个记录如何使用谓词的惯例。
以下是GNU-prolog documentation所说的内容:
该模式指定在调用内置谓词时是否必须实例化参数。模式在类型之前用符号编码。可能的模式是:
- +:必须实例化参数。
- - :参数必须是变量(如果内置谓词成功,将实例化)。
- ?:可以实例化参数或变量。
在实际代码中,您不应在参数前加上+。