イテレートの書き方

上で議論したように, リストの操作を簡単に書くのは各言語, 特に LL と呼ばれる言語たちでサポートされてきています.
C の直系と言える Java でも拡張 for 文が導入されましたし. 一旦それに慣れてしまうと, もう C の for 文には戻れません(苦笑)

そこで, 同じイテレートを書くにも上にあるような苦労をせず, できれば直感的に書きたいものです.
それがどんな形なのかいくつか検討してみたいと思います.

まずイテレート構文の条件の設定.

  1. map, filter, reduce 操作ができる.
  2. それらを何重にも繰り返せる.
  3. その書式が可読性に優れている.

案1 イテレータオブジェクト

素直に実装するとこうなるかな? という感じの案です.
コードは疑似コードです.

class Iterator
+ function Iterator filter(filter_cond)
+ function Iterator map(map_op)
+ function Iterator reduce(comb_op)

3つのメソッドの返り値が Iterator になっているので, 何重にもメソッドが呼べます. 自分としてはこれが分かりやすいです. C 出身なもので, 全て関数だと安心するのです.

案2 Python の真似

Python みたいに言語の構文にしてしまう案です.
Python の内包表記は多重にしたときに弱いので, そこの補強です.

[elem in list if filter_cond]
[elem in list mapping map_op]
[elem in list reducing comb_op]

# 組み合わせるときはこんな感じ
# list の要素のうち, cond に適合するものを map_op に渡してその返り値を comb_op でつないだ結果を返します.
[elem in list if cond mapping map_op reducing comb_op]

案1に近い形ですが list の要素 elem が左から右へフィルターやマップを潜り抜けたり, まとめ上げ操作を受けたりするイメージです.
文法的には英語というより, 日本語に近いでしょうか.


とりあえず思い付くところはここまでなので, 今日はこれで店仕舞い.
それではまた衝動が涌いたときに(^-^)/