イテレートの書き方
上で議論したように, リストの操作を簡単に書くのは各言語, 特に LL と呼ばれる言語たちでサポートされてきています.
C の直系と言える Java でも拡張 for 文が導入されましたし. 一旦それに慣れてしまうと, もう C の for 文には戻れません(苦笑)
そこで, 同じイテレートを書くにも上にあるような苦労をせず, できれば直感的に書きたいものです.
それがどんな形なのかいくつか検討してみたいと思います.
まずイテレート構文の条件の設定.
- map, filter, reduce 操作ができる.
- それらを何重にも繰り返せる.
- その書式が可読性に優れている.
案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 が左から右へフィルターやマップを潜り抜けたり, まとめ上げ操作を受けたりするイメージです.
文法的には英語というより, 日本語に近いでしょうか.
とりあえず思い付くところはここまでなので, 今日はこれで店仕舞い.
それではまた衝動が涌いたときに(^-^)/