クロージャでカリー化


おそらくは 404 Blog Not Found:Haskellは難しくない--こともある。 がらみで、クロージャとカリー化で検索訪問(?)をいただいたようなので…。


Smalltalk でも Ruby と(メソッド [] を使えないことを除いて)原則として同じく、“直感的”でない方法(^_^;)で行ないます。

log2 := [:b | [:x | x log / b log]].

強いて言えば、return が要らないこと(同時に、ブロックの記述が簡潔であること。関連:id:sumim:20060327#p1)、ブロックがオブジェクトであること(つまり、端的にはメッセージの受け手になることができること。関連:id:sumim:20060602#p1)も、他の言語に比較して特徴的といえましょうか…。(ちょwおまw。もっとあるだろ、誰にも気づく変態的なところが!w log の位置が逆だとか…、角度とか…w)


呼び出しには、Ruby の .call(val) や [val] の代わりに、value: val というメッセージをブロックに送って #value: を 起動させます。

lg2 := log2 value: 2.
lg2 value: 16

(log2 を束縛しておくために、ワークスペースで実行するか、それ以外では、3行まとめて評価してください。)


Ruby のセマンティックスにおけるメッセージングの比重は、他の OOPL を称する言語に比べると比較的高いので、もし Ruby のやりかたが“直感的”でないならば、その 10 分の1くらいの責任は Smalltalk(つか、メッセージングメタファを考えた、アラン・ケイ)にある…のかも?