Module 在导出谓词的模块中重新定义运算符优先级
我想编写一个模块,导出一个谓词,用户应该能够作为前缀操作符访问谓词Module 在导出谓词的模块中重新定义运算符优先级,module,prolog,operators,Module,Prolog,Operators,我想编写一个模块,导出一个谓词,用户应该能够作为前缀操作符访问谓词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 ** ERR
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不支持模块)。有没有一种方法用户不需要自己设置优先级?您可以使用
模块/2
指令导出操作符
例如:
:- module(lala, [p/1,
op(500, fy, p)]).
p comment.
p ça.
p va.
:-模块(lala,[p/1,
op(500,fy,p)])。
由于操作员也可在模块中使用,因此您可以编写例如:
:- module(lala, [p/1,
op(500, fy, p)]).
p comment.
p ça.
p va.
p评论。
帕萨。
p va。
其中p
用作前缀运算符