高階関数の件

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を複数にしただけ)、やっぱり何が難しいのかよくわからない…。単数の場合にも影響していないし。何か見落としているのだろうか。