我怀疑这个从文件中读取字符并将这些字符放入列表的简单 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 中读取一个字符并将其放在列表的头部(作为列表的第一个元素)......所以......为什么列表不包含相反的文件内容?
IE
我有一个名为myFile.txt的文件,其中包含以下文本:abc
所以readCharacter首先从 Stream 中读取一个字符并将其放在列表的头部,所以我有:
文本列表 = [一个]
然后readCharacter从 Stream 中读取b字符并将其放在我拥有的列表的头部:
文本列表 = [b,a]
然后readCharacter从 Stream 中读取c字符并将其放在我拥有的列表的头部:
文本列表 = [c,b,a]
如果是这样,TextList 应该包含 myFile.txt 文件的相反内容,但在我看来,TextList 以相同的顺序包含 myFile.txt 文件的相同内容。
为什么?我错过了什么?我的推理有什么问题?