SWI序言:无法定义新运算符

时间:2018-10-01 16:19:04

标签: 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, 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).

这在确切的行上给了我一个错误:

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).

1 个答案:

答案 0 :(得分:3)

正如@lurker在评论中所述,op/3是一条指令。它是这样的:

:- op(1111, xfx, mother).