尝试在Prolog中定义运算符时出现问题

dev*_*ium 7 operator-overloading prolog

我用以下代码定义了一个prolog文件:

divisible(X, Y) :-
    X mod Y =:= 0.

divisibleBy(X, Y) :-
    divisible(X, Y).

op(35,xfx,divisibleBy).
Run Code Online (Sandbox Code Playgroud)

Prolog抱怨说

'$ record_clause'/ 2:无权修改static_procedure`op/3'

我究竟做错了什么?我想定义一个divisibleBy运算符,它允许我编写如下代码:

4 divisibleBy 2
Run Code Online (Sandbox Code Playgroud)

谢谢.

Fre*_*Foo 14

使用

:- op(35,xfx,divisibleBy).
Run Code Online (Sandbox Code Playgroud)

:-告诉Prolog解释器在加载文件时评估下一个术语,即进行谓词调用,而不是将其视为定义(在这种情况下是重新定义op/3).

  • 更确切地说,这称为"指令"而不是"谓词调用"或"谓词评估". (2认同)