これまでの私の知識レベルは、The Little Schemer を問題なく完了した程度であり、現在、The Seasoned Schemer を 70% 完了しています。頭の片隅には、Scheme を使った実世界での経験を積むために取り組みたいプロジェクトのアイデアがありますが (おそらく、キャリアを通じて主に OO 言語を扱ってきたため)、どのようにすればよいのか、いまだに疑問に思っています。 OO 言語に対するいくつかのかなり基本的な問題に、Scheme のような関数型言語で取り組むことができます。
すべての質問を 1 つの stackoverflow の質問に押し込むのではなく、時間の経過とともにそれらを少しずつ取り出して、断片が所定の位置に収まると想定するので、実際には他の質問への回答は必要ありません。
Scheme がリストであることは明らかです。リストとリストのリスト。私は、すばやく取得できる (つまり、ハッシュ) "属性" を含むリストを格納し、別のリスト内に入れ子にすることができることに慣れています。
ファイル システム内のファイルとディレクトリのリストを再帰的に渡す例を挙げると、Scheme でこのようなアプローチを行うにはどうすればよいでしょうか。次の形式のデータ構造を渡すことができると思います。
'(("foo" (("bar.txt")
("zip.txt")
("button.txt")))
("other.txt")
("one-more" (("time.txt"))))
各ノードがリストの car として表され、その子がその cdr の car に含まれる別のリストとして表される場合、上記は次のツリー構造になります。
foo/
bar.txt
zip.txt
button.txt
other.txt
one-more/
time.txt
それとも、ある種のディープ ツリー トラバーサルを行う代わりに、ビジターを受け入れるイテレータ関数を渡すでしょうか? (ディレクトリをいつ切り替えているかを知るという点では、それがどのように見えるかは完全にはわかりません)。
この種の問題に関しては、ディレクトリ ツリーだけでなく、ツリー構造 (メタ データが添付されている) 全般に一般的なパターンはありますか?
オブジェクト指向の同等物と比較すると、これは必然的に非常に手間がかかりますか?