gpt4 book ai didi

module - 在导出谓词的模块中重新定义运算符优先级

转载 作者:行者123 更新时间:2023-12-05 02:14:15 25 4
gpt4 key购买 nike

我想编写一个导出谓词的模块,其中用户应该能够访问谓词 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 指令导出 运算符。

例如:

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

由于操作符在模块中也可用,您可以编写例如:

p comment.p ça.p va.

其中 p 用作前缀运算符。

关于module - 在导出谓词的模块中重新定义运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53768586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com