是否可以在谓词的参数中包含运算符(如+,>,=,!=,> =等)(下面的示例仅仅是一个演示而且没有太多用处)?
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工作。
答案 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)).