ToDo:
酔っ払ってても予戦突破くらいはできるだろうと思っていたけど、 寝てたら無理だとわかった。
マラソンの方は適当に書いたコードで100位くらいだから安全圏だろう。 ほっといてもたぶん大丈夫。
(13:38)
1引数関数しかないけど、 1つ引数を取って「1引数取ってなんかする関数」を返す関数を 書ければ2引数関数みたいなもんだよね、 というような考え方があると思う。 未だにわかってないのだけど、ラムダ計算とかいうやつがそれなんだろうか。
でまぁ、1引数しか無いのであれば、 OO ワールドはとても綺麗なんですよ。 なんというか OO のたまに嫌な点の一つとして、
obj.msg(param1, param2)
とかの引数が左右に散ってる印象を与える時があるんだよな。 特に param1 のメンバ関数でもいいよなぁ…というような時。
でも1引数だけでいいのなら その問題は起きなくて素晴らしい。
param2.(param1.(obj.msg))
全く美しくないな…
obj.msg は obj を保持したメッセージを返している、 クロージャ的なメッセージ。 param1.(obj.msg) も同じくクロージャ的なメッセージで、 そのメッセージを param2 に適用して始めてなんか実行されるというような。
まぁなんかだめだめな感じしかしないけど、 OO のメッセージに環境持たせるって考え方はないのかなぁとかたまに思うというはなし。
(14:24)
前 | 2009年 3月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
複数の引数を取る関数を『「1引数取ってなんかする関数」を返す関数』に分解することならカリー化という技法ではないでしょうか。
で引数が左右に散ってるというのがどういう感覚なのかよくわかってないんですが、「obj.msg(param1)(param2)」というのじゃだめなんでしょうか。obj.msg が関数を返しててそれに param2 を渡すという意味で。
分解する技法というより計算パラダイムとしてそういう考え方をラムダ計算っていうのかなぁとかそういう疑問でした。
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97
によると、
ラムダ計算では、関数の引数は常に1つである。引数を2つとる関数は、1つの引数をとり、1つの引数をとる関数を返す関数として表現される(カリー化)。
ということなので、引数が一つしかないというのはラムダ計算の要件の一つではあるみたいです。
で引数が左右…は、 OO ではレシーバも第零引数的なものだと思うので、 obj と param1, param2 が離れるのがたまに気持ち悪いと感じるのですよね。 Array#join(String) にするか String#join(Array) にするか悩んだりしてしまう問題とかの時に特に。
あとメッセージに環境持たせたいシーンがさっきあったのでメモ。
even = evens.max{|a,b|a.priority <=> b.priority}
odd = odds.max{|a,b|a.priority <=> b.priority}
で max{|a,b|a.priority <=> b.priority} の部分をまとめて変数に突っ込みたかった。