SWI Prolog-无法断言
我对运算符的定义如下:SWI Prolog-无法断言,prolog,prolog-assert,Prolog,Prolog Assert,我对运算符的定义如下: :- op(500, xfx, =>). 当我尝试类似于: assert(a => b). Prolog引发一个错误,该错误表示“没有修改静态\u过程(=>)/2的权限” 任何解决方案?作为一种安全措施,您必须警告SWI您将在运行时修改谓词: :- dynamic (=>)/2. 放在文件顶部就可以了。您一定是指另一个符号代替了(=>)/2。可能是(>)/2,这是一个无法修改的控件构造 Welcome to SWI-Prolog (Multi-th
:- op(500, xfx, =>).
当我尝试类似于:
assert(a => b).
Prolog引发一个错误,该错误表示“没有修改静态\u过程(=>)/2的权限”
任何解决方案?作为一种安全措施,您必须警告SWI您将在运行时修改谓词:
:- dynamic (=>)/2.
放在文件顶部就可以了。您一定是指另一个符号代替了
(=>)/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.
欢迎使用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,=>)。
对。
?-asserta(a=>b)。
对。
Nit:上面的语法无效(请尝试GNU查看)。它应该是
(=>)/2
@false:哦,我没有任何翻译来检查。谢谢,我将编辑:)它总是这样:谓词指示符必须有括号,如果它有相应的运算符定义。所以它是(;)/2
和(',')/2
。引号仅用于分隔类似标记的'ab'
它们是独立于运算符声明而需要的。@false:好!我在doc中遇到了这个符号,但不知道它是针对SWI还是norm的,谢谢你的澄清:)迟早你会需要这个标准-看看如何便宜地获得它。是的,但我认为如果你只是以交互方式使用Prolog,它是有效的!如果你编译这个文件,它就不起作用了!!你指的是哪种Prolog系统?SWI、YAP、B、GNU都是一样的。它在标题(SWI Prolog)中,但除此之外:使用动态声明是个好主意。