無名関数?
今回は関数の定義を追加してa=fun(c)c+1 a(2)で、3が返るようにします。
そのために、文演算子というものを用意します。
文演算子?はぁ???なにそれ?って思うと思いますが、
要するにsymbol ( param1 ) param2
というようにかける物を文演算子と呼ぶことにします。
2009-06-21
ちょっと微妙かな。上の例だと
a=b(c)c+1 b(2)
と書いて 3 が書けるようになってもいいし。
単に無名関数を作りたいだけならば、fun をキーワードにして
fun(c) c + 1
で関数を作れば良いかな。
ついでにいうと、この文脈において c + 1 が Exp オブジェクトを返す式だということを考えているらしいけど、無名関数専用の文法を用意すればすんなりかけるよね。
void AnonymousFunction():{ }{ "fun" "(" ParamList() ")" Expression() }
で何も問題がないし。
どんなことでも演算子を使って実行中に構築するというデザインは、確かに一見シンプルでそそられるんだけど、実際使うと使い勝手が悪いんだよね。上手くやりこまないと、今回の c + 1 みたいに「ほとんど統一したけど、ここの部分は特別に扱います」って事例が出てきて、「じゃあ、統一しないほうが良かったんじゃない?」って意見が出てきてしまいますゆえ。