我正在阅读2htdp书中的Part two,我对read-words/line
下2htdp/batch-io
函数的行为感到好奇。
我创建了两个不同的文件,第一个文件在文件末尾有\n
,第二个文件没有文件,如下所示:
echo -ne "first line\n\nthird line\n" > file1.txt
echo -ne "first line\n\nthird line" > file2.txt
如果我用read-words/line
读取每个文件,结果就是:
(read-words/line "doc/book/htdp2/data/file1.txt")
; => '(("first" "line") () ("third" "line"))
(read-words/line "doc/book/htdp2/data/file2.txt")
; => '(("first" "line") () ("third" "line"))
看起来该函数不保留第一个文件中最后一个换行符的信息。
这种行为是否打算?
我在GNU / Linux机器上运行Dr Racket 6.2.1。
谢谢,
答案 0 :(得分:1)
我说是的。 read-words / line的意图是为每行读取生成一个单词列表。一行通常是以换行符结尾的字符序列。文件的最后一行可以以" eof-of-file"而不是换行符。如果您尝试此示例:
echo -ne "first line\n\nthird line\n\n" > file1.txt
我希望最后一行产生一个空的单词列表。