我想知道是否有人愿意帮我解决我在命题Prolog中编写的一些代码所遇到的问题。该计划如下:
:- dynamic superman/0,ironman/0,greenlantern/0,ironmanflies/0,
supermanflies/0,greenlanternflies/0,superheronironman/0,superherosuperman/0,
superherogreenlantern/0,abnormalsuperman/0,abnormalgreenlantern/0,
abnormalironman/0,specialabnormalironman/0,usesIronmanSuit.
ironmanflies:- superheroironman, \+ abnormalironman.
supermanflies:- superherosuperman, \+ abnormalsuperman.
greenlanternflies:- superherogreenlantern, \+ abnormalgreenlantern.
\+ abnormalironman:- specialabnormalironman.
abnormalironman:- \+ specialabnormalironman.
specialabnormalironman:- usesIronmanSuit.
superheroironman:- ironman.
superherosuperman:- superman.
superherogreenlantern:- greenlantern.
superman.
当我尝试在SWI Prolog中编译它时,我收到以下错误:
ERROR: /home/justin/COMP5307/Assignments/assig2/a2q1e1.pl:6:
No permission to modify static procedure `(\+)/1'
Defined at /usr/lib/swi-prolog/boot/init.pl:337
我的目标是表达界限
\+ abnormalironman:- specialabnormalironman.
语法正确。我已经看到了一些在结果中引入否定运算符的可能方法的例子,但那些是用户定义的方法,我觉得使用内置方法会更舒服。 Prolog文档在这个主题上相当模糊,所以我很感激任何人可能愿意提供的任何帮助。
对于第一次阅读此问题的人来说,它最初涉及一个不充分的实例化错误,该错误被发现是文件名的第一个字母为大写的结果。对于那些首次使用SWI Prolog的人来说,文件名应该用小写的第一个字母来避免这个错误。