我按如下方式定义运算符:
:- op(500, xfx, =>).
当我尝试类似的事情时:
assert(a => b).
Prolog提出错误,指出“无权修改static_procedure(=>)/ 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.