Prolog 如何在文件中使用op/3

Prolog 如何在文件中使用op/3,prolog,Prolog,我尝试使用op/3在文件中定义运算符。像这样 is_in(Thing, Place):- location(Thing, Place). op(35, xfx, is_in). 但是当我在repl中查阅/1文件时,我得到了一个异常 No permission to modify static procedure `op/3' 我尝试使用dynamic指令,但它会导致相同的错误 执行op(35,xfx,is_in)。在repl中起作用。问题是您试图重新定义op/3谓词,而不是声明新的运算

我尝试使用
op/3
在文件中定义运算符。像这样

is_in(Thing, Place):-
  location(Thing, Place).

op(35, xfx, is_in).
但是当我在repl中查阅/1文件时,我得到了一个异常

No permission to modify static procedure `op/3'
我尝试使用
dynamic
指令,但它会导致相同的错误


执行
op(35,xfx,is_in)。
在repl中起作用。

问题是您试图重新定义
op/3
谓词,而不是声明新的运算符

要在查阅文件时声明新运算符,必须在程序中添加指令:

:-op(35, xfx, is_in).

请注意,在指令之前,运算符将不可用,因此您应该将指令添加到其在文件中的用法上方。

op/3
是一个指令,因此需要在文件中使用语法
:-op(..)。
。另一个选项是在定义模块时使用模块导出列表。可能与OP无关。