引数なしの関数呼び出しと変数参照
JavaScript | Scheme | Haskell | Ruby | |
2引数 | f(x,y) | (f x y) | f x y | f x,y |
1引数 | f(x) | (f x) | f x | f x |
0引数 | f() | (f) | なし | f |
関数本体 | f | f | f | Kernel.method(:f) |
JavaScriptは後ろに括弧があるかで区別する。
Schemeは括弧でくくられているかで区別する。
Haskellには副作用がないので、引数のみによって関数の返値が決まる。
よって、引数なしの関数は単なる定数で代用可能であり、引数なしの関数というものはない。
(そもそも (lambda () 1) のつもりで (\ -> 1) と書いてもparse errorになる。)
Rubyは関数呼び出し時の括弧を省略可能にする道を選んだので、
関数本体へのアクセスには別の手段を用意する必要がある。
(そもそもデータと関数の名前空間が別)
Ruby1.9は後ろに[]があるかで区別する、もある。