Переопределение приоритета оператора в модуле для экспортируемого предиката - PullRequest
0 голосов
/ 13 декабря 2018

Я хотел бы написать модуль, который экспортирует предикат, где пользователь должен иметь возможность доступа к предикату p/1 в качестве префиксного оператора.Я определил следующий модуль:

:- module(lala, [p/1]).

:- op(500, fy, [p]).

p(comment).
p(ca).
p(va).

и загружаю его сейчас с помощью:

?- use_module(lala).
true.

К сожалению, запрос не выполняется:

?- p X.
ERROR: Syntax error: Operator expected
ERROR: p
ERROR: ** here **
ERROR:  X .

После установки оператораправильно, все работает:

?- op(500, fy, [p]).
true.
?- p X.
X = comment ;
X = ca ;
X = va.

Я использовал SWI Prolog для вывода, но та же проблема возникает и в YAP (GNU Prolog не поддерживает модули).Есть ли способ, которым пользователю не нужно самим устанавливать приоритет?

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете экспортировать оператора с помощью директивы module/2.

Например:

:- module(lala, [p/1,
                 <b>op(500, fy, p)</b>]).

Поскольку оператор также доступен в модуле, вы можете написать, например:

p comment.
p ça.
p va.

, где используется pв качестве префиксного оператора.

...