リスト構造とリスト処理
なぜ、リストの自作は良い練習問題なのか?
- 典型的なデータ構造とメモリーイメージに慣れる。
- ポインタ・参照の操作に習熟できる。
- 再帰処理が理解できる。
- データのミュータビリティ、破壊的変更(上書き)と非破壊的操作(修正しながら転写)を理解できる。
- 双方向リストやツリーに一般化できる。
- さらに有向グラフ処理にも応用できる。有向グラフ処理はアルゴリズムの王様だろう。
- 代数的データ構造に発展する。
- 無限リストの遅延評価によるストリーム、イテレータなど。
- リストモナドは、モナドの典型例。
- 総称プログラミングでも良い例題。length, zipの一般化
- 再帰から、map, foldへ。さらに一般化forld
- 最近では、MapReduceによる並列処理。
リストは、実用上も理論上も、常にデータ構造の中核にあって、今でも新しい話題を提供している。例:http://d.hatena.ne.jp/m-hiyama/20130827/1377583720 に紹介した論文:
- Title: Parametric Datatype-Genericity
- Authors: Jeremy Gibbons, Ross Paterson
- URL: http://www.cs.ox.ac.uk/jeremy.gibbons/publications/parametric.pdf