Пролог SWI: невозможно определить нового оператора - PullRequest
0 голосов
/ 01 октября 2018

Я использую SWI-Prolog версии 7.6.4 в Arch Linux.

У меня есть база данных фактов:

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 голосов
/ 01 октября 2018

Как @lurker описал это в комментариях, op/3 - это директива.Это работает так:

:- op(1111, xfx, mother).
...