如何在命题Prolog

时间:2018-03-17 16:31:00

标签: syntax prolog negation

我想知道是否有人愿意帮我解决我在命题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的人来说,文件名应该用小写的第一个字母来避免这个错误。

0 个答案:

没有答案