You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:32:45