gpt4 book ai didi

prolog - 从 Logtalk 访问 SWI-Prolog 库

转载 作者:行者123 更新时间:2023-12-04 04:57:37 24 4
gpt4 key购买 nike

我在使用 Logtalk 时玩得很开心,但在使用 phrase_from_file 时遇到了问题.具体来说,我的情况如下所示:

:- object(scan_parser).

:- public(scanlist//1).
scanlist([Scan|Scans]) --> scan(Scan), dcg_basics:blanks, scanlist(Scans).
scanlist([]) --> [].

:- public(scan_file/2).
:- mode(scan_file(+filename, -scans), one).
scan_file(Filename, Scans) :- pio:phrase_from_file(scanlist(Scans), Filename).

...
:- end_object.

麻烦在于对 phrase_from_file 的调用。 .找不到 scanlist ,大概是因为它是这个对象的本地,所以我得到这个错误:
?- scan_parser::scan_file('input.txt', Scans).
ERROR: phrase/3: Undefined procedure: pio:scanlist/3

但是,如果我尝试使用这样的模块引用来扩大它:
scan_file(Filename, Scans) :- pio:phrase_from_file(::scanlist(Scans), Filename).

我收到此错误:
?- scan_parser::scan_file('input.txt', Scans).
ERROR: phrase/3: Undefined procedure: pio: (::)/3

如果我使用 pio:phrase_from_file(this::scanlist(Scans), Filename) 也一样或 pio:phrase_from_file(scan_parser::scanlist(Scans), Filename) .如果我在模拟 SWI 的模块工具时使用单个冒号,我会收到类似 ERROR: phrase/3: Undefined procedure: scan_parser:scanlist/3 的消息.

我认为这里的问题是 SWI 的 PIO 库正试图构建一些东西交给 phrase。而且它还不够智能。但这是我经常想到的,使用 phrase_from_file/2 ,而且我相信还有其他时候我想从 SWI 的图书馆中挖掘一些东西并借用它。正确的前进方向是什么?我想尽可能地保留 Logtalk 的封装。

谢谢!

最佳答案

我正在为 Logtalk 3.x 设计一个通用解决方案,以支持将闭包作为元参数的 Prolog 模块元谓词。同时,您可以尝试以下(丑陋的)解决方法:

% ensure the module is loaded
:- use_module(library(pio)).


:- object(scan_parser).

% override the non-standard meta-arguments declarations
:- meta_predicate(pio:phrase_from_file(2,*)).

:- public(scanlist//1).
scanlist([Scan|Scans]) --> scan(Scan), dcg_basics:blanks, scanlist(Scans).
scanlist([]) --> [].

:- public(scan_file/2).
:- mode(scan_file(+filename, -scans), one).
scan_file(Filename, Scans) :- pio:phrase_from_file(user:scan_parser_scanlist(Scans), Filename).

{scan_parser_scanlist(Scans, A, B)} :-
phrase(scanlist(Scans), A, B).

...

:- end_object.

我无法测试,因为您只发布了部分目标代码。

关于prolog - 从 Logtalk 访问 SWI-Prolog 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16570776/

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