SWI Prolog:无法定义新运算符
我在Arch Linux上使用的是SWI Prolog 7.6.4版 我有一个事实数据库:SWI Prolog:无法定义新运算符,prolog,operators,Prolog,Operators,我在Arch Linux上使用的是SWI Prolog 7.6.4版 我有一个事实数据库: female(mary). female(liz). female(mia). female(tina). female(ann). female(sue). male(mike). male(jack). male(fred). male(tom). male(joe). male(jim). parent(mary, mia). parent(mary, fred). parent(mary, tin
female(mary). female(liz). female(mia). female(tina). female(ann). female(sue).
male(mike). male(jack). male(fred). male(tom). male(joe). male(jim).
parent(mary, mia). parent(mary, fred). parent(mary, tina).
parent(mike, mia). parent(mike, fred). parent(mike, tina).
parent(liz, tom). parent(liz, joe).
parent(jack, tom). parent(jack, joe).
parent(mia, ann).
parent(tina, sue). parent(tina, jim).
parent(tom, sue). parent(tom, jim).
我将mother
谓词定义如下:
mother(M, C) :- parent(M, C), female(M).
谓词按预期工作:
?- mother(liz, tom).
true .
?- mother(liz, fred).
false.
现在我想定义一个操作符,比如优先级相对较低的liz-mother-tom
,我这样做:
op(1111, xfx, mother).
:- op(1111, xfx, mother).
这给了我一个关于这一行的错误:
ERROR: /home/user/prolog/family.pl:13:
No permission to modify static procedure `op/3'
我不知道我做错了什么
根据要求,以下是一个列表中的完整文件:
female(mary). female(liz). female(mia). female(tina). female(ann). female(sue).
male(mike). male(jack). male(fred). male(tom). male(joe). male(jim).
parent(mary, mia). parent(mary, fred). parent(mary, tina).
parent(mike, mia). parent(mike, fred). parent(mike, tina).
parent(liz, tom). parent(liz, joe).
parent(jack, tom). parent(jack, joe).
parent(mia, ann).
parent(tina, sue). parent(tina, jim).
parent(tom, sue). parent(tom, jim).
mother(M, C) :- parent(M, C), female(M).
op(1111, xfx, mother).
正如@潜伏者在评论中所描述的,
op/3
是一个指令。它的工作原理如下:
op(1111, xfx, mother).
:- op(1111, xfx, mother).
您能否共享完整文件(或至少部分触发此异常的文件?)。可能是顺序、间距等原因造成的。@WillemVanOnsem当然,请参见上面的
op/3
是一个指令。你是否在它前面写了:-
<代码>:-op(1111,xfx,mother)。不幸的是,SWI Prolog文档在这一点上并不清楚。避免使用此类运算符,它们只会妨碍您学习language@false我将在我的下一次旅程中接受这个建议,但正如你所能想象的,这是家庭作业,教授希望我这样做。