gpt4 book ai didi

prolog - 打开空文件后的 End_of_stream 属性

转载 作者:行者123 更新时间:2023-12-05 02:26:56 24 4
gpt4 key购买 nike

我在一个包含空文件 empty 的目录中运行以下查询:

?- 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 系统得到的:

<表类="s-表"><头>序言系统eof_action( 错误)eof_action( eof_code)eof_action( reset)<正文>SICStu序言不不不GNU 序言在在不Scryer 序言在在在Traella序言在在不SWI序言不不不

在这种特殊情况下,上述系统的行为似乎大不相同。

ISO-Prolog 标准是否指定了符合处理器的正确行为?

最佳答案

流位置与结束位置的关系:
S是大小为 n 的输入流.让p成为流源中的一个位置S .

  • 流位置是not流结束如果 p < n .
  • 流位置是at流结束如果 p = n .
  • 流位置是past流结束如果 p > n .

在实际实现中,流位置可能是一对 (q,e)其中 q是源中的位置,e{not, at, past}这样:

  • 流位置是not流结束当且仅当 q < ne = not .
  • 流位置是at流结束当且仅当 q = ne = at .
  • 流位置是past流结束当且仅当 q = ne = past .

这是由:

7.10.2.13
end_of_stream(E) - If the stream position is end-of-stream then E is unified with at ...

还有:

7.10.1.1
read - Input. ... input shall start at the beginning of that source.

知道这一点,流位置是at打开空文件时流结束。

或者stream_property/2有问题或流处于无效状态。

一个更好的问题可能是合规系统应该如何处理流结束?

并对不同引擎的空文件和非空文件进行测试。

关于问题的评论:
标准上有一条注释,谓词 peek_char/2保持流位置不变,因此查询类似 stream_property(S, end_of_stream(Eos0)), peek_char(S, _), stream_property(S, end_of_stream(Eos)), Eos0 = Eos应该会成功。

关于prolog - 打开空文件后的 End_of_stream 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73500618/

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