5

我定义一个运算符如下:

:- op(500, xfx, =>).

当我尝试类似的事情时:

assert(a => b).

Prolog 引发错误,提示“无权修改 static_procedure (=>)/2”。

有什么解决办法吗?

4

2 回答 2

5

作为安全措施,您必须警告 SWI 您将在运行时修改谓词:

:- dynamic (=>)/2.

放在文件顶部应该这样做。

于 2012-04-23T14:15:32.207 回答
4

您一定是用另一个符号代替(=>)/2. 可能(->)/2这是一个无法修改的控制结构。

欢迎使用 SWI-Prolog(多线程,32 位,版本 6.1.3-116-gf1c7e06)
...
?-断言((a -> b))。
错误:asserta/1:无权修改静态过程 `(->)/2'
错误:定义在 /opt/gupu/pl-devel/lib/swipl-6.1.3/boot/init.pl:194
?- op(500, xfx, =>)。
真的。

?-断言(a => b)。
真的。
于 2012-04-23T14:55:11.890 回答