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