到目前为止,我的知识水平足以让我顺利完成 The Little Schemer,而我目前通过 The Seasoned Schemer 完成了 70%。在我的脑海中,我有一些想法,我想从事一些项目,以获得一些使用 Scheme 的实际经验,但是(也许是因为我在整个职业生涯中主要使用 OO 语言)我仍然发现自己想知道如何可以使用像 Scheme 这样的函数式语言来解决面向 OO 语言的一些相当基本的问题。
我不会把我所有的问题都放在一个 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
或者也许有人会传递一个接受访问者的迭代器函数,而不是进行某种深度树遍历?(就知道何时切换目录而言,不完全确定它的外观)。
这类问题是否存在一般模式,不仅仅是目录树,还有一般的树结构(带有附加的元数据)?
与面向对象的等价物相比,这是否不可避免地会变得相当繁琐?