高階関数の件
(tDiaryがタイムアウトしてしまったので、こちらで追記)
http://www.rubyist.net/~matz/20070512.html#p04
あと、一般に(広い意味で)何らかの言語の抽象構文みたいに、複数のコンストラクタを持つユーザ定義データ型に対するイテレータ(fold)は複数の関数引数が必須なので、ライブラリだけ調べるより、むしろfunctional pearlなどを見たほうが…
レコードやstructureでまとめるにせよ、(たとえばRubyだったら)ブロックがそのままでオブジェクトになっていれば、さらに楽になるかと思いました。少し違いますが、SchemeではLispのfuncallがいらない、みたいな。
追記:まだtDairyのコメントがタイムアウトします。;_; リロードすると投稿できているようですが。
「ブロックを二つ書く」というのは、たとえばif文をboolのメソッドにしてthen節とelse節を渡したり(?)とか、一般にコンストラクタが複数のデータ型(boolはtrueとfalseの二つ)に対する制御構造を記述したりとか、そういう話です。そうしたほうが良いと言っているわけでは必ずしもなくて、もしそうしても既存の文法に影響はないのでは、という思考実験として。
追記2:とりあえずRubyソースコードのparse.yだけ改造して、
data = [1, 2, 3] data.each { |i| print i, "\n" } { |i| print i, "\n" } { |i| print i, "\n" }
が構文解析だけできるようにしてみました(意味なし)。普通のmake testもバッチリ(死語)です。生まれて初めて書いたRubyプログラムです!(←だからRubyプログラムになってないってば) でも、この変更だけなら一分でできたので(method_callなどの直後のbrace_blockを複数にしただけ)、やっぱり何が難しいのかよくわからない…。単数の場合にも影響していないし。何か見落としているのだろうか。