SWI-Prolog 8.2.4中prolog_load_context返回script=false问题咨询
SWI-Prolog中prolog_load_context/2的行为疑问:Bug还是理解误区?
我写了一段简单的Prolog程序:
% bug_repro.pro am_i_a_script(Bool) :- prolog_load_context(script, Bool).
根据SWI-Prolog官方文档,调用prolog_load_context/2的代码位于文件内时,Bool应被统一为true。但在SWI-Prolog 8.2.4解释器中加载该程序并查询,结果却显示并非脚本:
?- version. Welcome to SWI-Prolog (threaded, 64 bits, version 8.2.4) [...] true. ?- ['bug_repro.pro']. true. ?- am_i_a_script(Result). Result = false.
使用命令行-s和-l选项执行查询,结果同样为false:
$ swipl -q -t halt -s bug_repro.pro -g 'am_i_a_script(Result), write(Result), nl' false $ swipl -q -t halt -l bug_repro.pro -g 'am_i_a_script(Result), write(Result), nl' false
此外,我还无法获取directory键(这才是我真正关注的内容)。
我测试了prolog_load_context返回的所有键值对,代码如下:
% context.pro context :- prolog_load_context(Key, Val), write(Key), write(':'), write(Val), nl, false.
执行结果:
$ swipl -q -s context.pro ?- context. module:user dialect:swi script:false variable_names:[] term:[] false. ?- source_file(context, File). File = '/home/<edited>/context.pro'.
注意source_file/2可以正确返回context谓词所在文件的绝对路径,但如果谓词是从模块间接加载的,source_file/2会失败,这可能是相关问题。
请问这是SWI-Prolog的Bug,还是我存在理解误区?(运行环境:Debian GNU/Linux 11 (bullseye))
内容的提问来源于stack exchange,提问作者Castamos
相关产品推荐
相关产品推荐

