引数なしの関数呼び出しと変数参照

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は後ろに[]があるかで区別する、もある。