一个简单的prolog语法问题

Olh*_*sky 1 prolog

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

|: test1(+X,+Y) :- X >= 0, X =:= Y.
Run Code Online (Sandbox Code Playgroud)

现在处于查询模式:

?- test1(1, 1).
false.
Run Code Online (Sandbox Code Playgroud)

我期望这返回"真",因为1大于0而1等于1.

那我哪里出错了?

Atn*_*nNn 5

这就是你想要的:

test1(X,Y) :- X >= 0, X =:= Y.
Run Code Online (Sandbox Code Playgroud)

然后:

?- test1(1, 1).
true.
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

在实际代码中,不应该在参数前加上+.