图 27.3 把文件转换成行表
这样,我们就可以轻易地填写模板中的空缺。在 file->list-of-lines中,第一个子句的答案必然是 empty,
因为空文件并不包含任何行。第二个子句的答案必然是用 cons 把(first-line afile)的值与(file->list-of-lines
(remove-first-line afile)) 的值连接起来,因为前一个表达式求出第一行,而后一个表达式求出其余的行。另
外,两个辅助函数使用结构递归的方法处理它们的输入;开发它们只是一个简单的练习。图 27.3给出了这
三个函数的定义,以及 NEWLINE的变量定义。
我们来观察一下把前述的第一个文件转换成行表的过程:
(file->list-of-lines (list 'a 'b 'c 'NL 'd 'e 'NL 'f 'g 'h 'NL))
1