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

打开空文件后end_of_stream属性的合规性判定问询

问题场景

在包含空文件empty的目录中执行以下Prolog查询:

?- member(EOF_action,[error,eof_code,reset]), open(empty,read,S,[eof_action(EOF_action)]), stream_property(S,end_of_stream(EOS)), close(S).

不同Prolog系统返回的EOS结果如下:

Prolog系统eof_action(error)eof_action(eof_code)eof_action(reset)
SICStus Prolognotnotnot
GNU Prologatatnot
Scryer Prologatatat
Traella Prologatatnot
SWI-Prolognotnotnot

各系统在此边缘场景中的表现差异显著,请问ISO-Prolog标准是否明确了合规处理器的正确行为?


回答

ISO-Prolog标准对该场景的行为有明确规定。依据ISO/IEC 13211-1:1995的相关条款:

  • 当打开空文本流用于读取时,流的初始结束状态即为at(位于文件末尾),该状态与eof_action选项的设置无关。

标准明确说明,流的结束状态由当前位置决定,空文件打开后,当前位置直接处于文件末尾,因此stream_property(S, end_of_stream(EOS))必须返回EOS = at。

eof_action选项的作用是控制后续尝试从已处于EOF状态的流读取数据时的行为,而非改变流打开时的初始EOF状态。那些返回not的系统不符合ISO标准的要求。

内容的提问来源于stack exchange,提问作者repeat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:45:38