我想编写一个模块,该模块导出谓词,以便用户可以作为前缀运算符访问谓词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不支持模块)。用户有没有办法自己设置优先级?
答案 0 :(得分:4)
您可以使用module/2
指令导出运算符。
例如:
:- module(lala, [p/1, op(500, fy, p)]).
由于该模块中还提供了运算符,因此您可以编写例如:
p comment. p ça. p va.
其中p
用作前缀运算符。