lam*_*y.x 3 module operators prolog
我想编写一个导出谓词的模块,其中用户应该能够将谓词p/1作为前缀运算符访问。我定义了以下模块:
:- module(lala, [p/1]).
:- op(500, fy, [p]).
p(comment).
p(ca).
p(va).
Run Code Online (Sandbox Code Playgroud)
并立即通过以下方式加载:
?- use_module(lala).
true.
Run Code Online (Sandbox Code Playgroud)
不幸的是,查询失败:
?- p X.
ERROR: Syntax error: Operator expected
ERROR: p
ERROR: ** here **
ERROR: X .
Run Code Online (Sandbox Code Playgroud)
正确设置运算符优先级后,一切正常:
?- op(500, fy, [p]).
true.
?- p X.
X = comment ;
X = ca ;
X = va.
Run Code Online (Sandbox Code Playgroud)
我使用 SWI Prolog 进行输出,但在 YAP 中也出现同样的问题(GNU Prolog 不支持模块)。有没有办法让用户不需要自己设置优先级?
您可以使用指令导出运算符module/2。
例如:
\n\n\n:- 模块(lala, [p/1,\n op(500, fy, p) ])。\n\n\n
由于该运算符在模块中也可用,因此您可以编写以下内容:
\n\n\np 注释。\np \xc3\xa7a。\np va。\n\n\n
wherep用作前缀运算符。