module - 为导出的谓词重新定义模块中的运算符优先级
问题描述
我想编写一个导出谓词的模块,用户应该能够在其中访问谓词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 不支持模块)。有没有一种用户不需要自己设置优先级的方法?
解决方案
您可以使用指令导出运算符。module/2
例如:
:- 模块(lala, [p/1, op(500, fy, p) ])。
由于该运算符在模块中也可用,因此您可以编写例如:
p 评论。 pça. 弗吉尼亚州
wherep
用作前缀运算符。
推荐阅读
- .net - 如何制作高清晰度的透明表格?
- android - 膨胀类异常 Xamarin 表单时出错
- python - 图像聚类 - 在 GPU 上分配内存
- java - WebLogic 12c 上的 Oauth2 部署 - 401 授权错误
- node.js - Angular Frontend Docker 容器不会从 node express 后端 Docker 容器发送/接收数据
- javascript - JavaScript 变量不在范围内
- matplotlib - 用 matplotlib 在 3d 中绘制平面
- jquery - 如何从 JSON 文件中以逗号分隔的 url 列表中获取第一项?
- javascript - ReactJS 使用 C# Webview 从外部组件设置值
- c++ - 将 brew 安装的库包含到 XCode