Prolog - 谓词中的运算符

时间:2016-05-30 22:49:03

标签: prolog operators

是否可以在谓词的参数中包含运算符(如+,>,=,!=,> =等)(下面的示例仅仅是一个演示而且没有太多用处)?

test(A > B) :- A > B.
test(A >= B) :- A < B.

似乎工作,但是:

test(A != B) := A > B.
test(A <> B) := A < B.

不 - 为什么?为什么有时可以包括运营商,有时不包括?如何让test(A != B) := A > B.工作?

我在sicstus工作。

1 个答案:

答案 0 :(得分:3)

符号!=<>:=不是Prolog中的运算符。您需要使用op/3指令使它们成为运算符。在分析代码之前,Prolog必须能够看到运算符声明。

字符序列!=不是Prolog中的标记,因此您需要用单引号将其括起来。

:- op(700, xfx, '!=').
:- op(700, xfx, <>).
:- op(1100, xfx, :=).

test(A '!=' B) := A > B.
test(A <> B) := A < B.

上面定义了一个带有两个子句的谓词。子句没有实体,谓词的名称为:=,其为2。它完全相同:

:=(test('!='(A,B)), >(A,B)).
:=(test(<>(A,B)), <(A,B)).