SWI-Prolog - 无法断言

时间:2012-04-23 14:03:25

标签: prolog prolog-assert

我按如下方式定义运算符:

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

当我尝试类似的事情时:

assert(a => b).

Prolog提出错误,指出“无权修改static_procedure(=>)/ 2”。

任何解决方案?

2 个答案:

答案 0 :(得分:6)

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

:- dynamic (=>)/2.

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

答案 1 :(得分:5)

你必须用另一个符号来代替(=>)/2。可能是(->)/2,它是一个无法修改的控件构造。

Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.1.3-116-gf1c7e06)
...
?- asserta((a -> b)).
ERROR: asserta/1: No permission to modify static procedure `(->)/2'
ERROR: Defined at /opt/gupu/pl-devel/lib/swipl-6.1.3/boot/init.pl:194
?- op(500, xfx, =>).
true.

?- asserta(a => b).
true.