【发布时间】:2023-03-28 06:45:01
【问题描述】:
我对这个从文件中读取字符并将这些字符放入列表的简单 Prolog 程序如何工作表示怀疑。
代码运行良好,如下:
readFile(FileInput, TextList):- open(FileInput, read, Stream),
readCharacter(Stream, TextList),
close(Stream),
!.
readCharacter(Stream,[]):- at_end_of_stream(Stream). % Exit condition
readCharacter(Stream,[Char|Tail]):- get0(Stream,Char),
readCharacter(Stream,Tail).
当调用 readFile/2 谓词时,会发生:输入传递的文件以读取模式打开并且该文件与流相关联。
然后调用 readCharacter/2 谓词,将 Stream 关联到我的输入文件(要读取的文件)和 TextList 即放置文件的列表内容。
readCharacter/2 谓词分为两种情况:
1) 使用 at_end_of_stream(Stream) 谓词的退出条件,在读取 Stream 的最后一个字符(即文件中的最后一个字符)后成功。在这种情况下,什么都不做,readCharacter 谓词结束
2) 第二种情况是添加读取字符并将其添加到我的 TextList 的规则:
readCharacter(Stream,[Char|Tail]):- get0(Stream,Char),
readCharacter(Stream,Tail).
在这里我有一个疑问:它使用 get0 从 Stream 中读取一个字符并将其放在列表的头部(作为列表的第一个元素)......所以......为什么列表不包含文件内容的反面?
即
我有一个名为 myFile.txt 的文件,其中包含以下文本:abc
所以 readCharacter 首先从 Stream 中读取 a 字符并将其放在列表的头部,所以我有:
文本列表 = [a]
然后 readCharacter 从 Stream 中读取 b 字符并将其放在我拥有的列表的头部:
文本列表 = [b,a]
然后 readCharacter 从 Stream 中读取 c 字符并将其放在我拥有的列表的头部:
文本列表 = [c,b,a]
如果是这样,TextList 应该包含 myFile.txt 文件的相反内容,但在我看来,TextList 以相同的顺序包含 myFile.txt 文件的相同内容。
为什么?我错过了什么?我的推理有什么问题?
【问题讨论】:
标签: prolog