迄今为止我的知识水平已经能够毫不费力地完成《小小计算机》的阅读,并且我目前已经完成了《老手计算机》的70%。我脑海中已经有了一些想法,希望通过工作实践来学习Scheme语言,但是(也许是因为我在职业生涯中主要使用面向对象的语言),我仍然在思考如何用函数式的Scheme语言解决一些相当基本的问题,比如面向对象的语言。
与其在单个stackoverflow问题中提出所有问题,我宁愿分散在时间上逐个提出问题,并认为这些问题会自动落到位,所以我不需要其他问题的答案。
很明显,Scheme的特点是列表。无数的列表和列表中嵌套的列表。我习惯于能够存储包含“属性”的列表,可以快速检索(即散列表)并可以相互嵌套。
以传递文件系统中文件和目录的列表为例,如何在Scheme中处理类似的问题呢?我猜你可以传递一个类似这样的数据结构:
每个节点都被表示为列表的汽车,它的子节点则表示为包含在其cdr的另一个列表中,因此上面的内容是一棵树的结构:
与其在单个stackoverflow问题中提出所有问题,我宁愿分散在时间上逐个提出问题,并认为这些问题会自动落到位,所以我不需要其他问题的答案。
很明显,Scheme的特点是列表。无数的列表和列表中嵌套的列表。我习惯于能够存储包含“属性”的列表,可以快速检索(即散列表)并可以相互嵌套。
以传递文件系统中文件和目录的列表为例,如何在Scheme中处理类似的问题呢?我猜你可以传递一个类似这样的数据结构:
'(("foo" (("bar.txt")
("zip.txt")
("button.txt")))
("other.txt")
("one-more" (("time.txt"))))
每个节点都被表示为列表的汽车,它的子节点则表示为包含在其cdr的另一个列表中,因此上面的内容是一棵树的结构:
foo/
bar.txt
zip.txt
button.txt
other.txt
one-more/
time.txt
也许可以传递一个接受访问者的迭代函数来进行某种深度树遍历?(对于如何知道何时切换目录,我不是完全确定它的外观)。
在这种问题上是否存在一般模式,不仅是目录树,还包括带有附加元数据的树结构?
与面向对象的等效方法相比,这是否不可避免地变得非常棘手?