カリー化

カレーではありません。
なんか、数学用語っぽいです。
prototype.jsの中身を読んでいたら、このカリー化の関数が書かれており、気になったので調べてみました。
ウィキペディアより、

カリー化 (currying) とは、計算機科学分野の技法の一つ。
複数の引数をとる関数を、引数が「もとの関数の最初の引数」で
戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること。

あとはURL行ってください。
http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96


で、とりあえずサンプルを書いてみる。by javascript

//カリー化にするための関数
function curry(func,x) {
	return function(y) {
		func(x,y);
	}
}
//func用関数
function add(x,y) {
	return x+y;
}
//func用関数
function reduce(x,y) {
	return x-y;
}

var dd5 = curry(add, 5);
//dd5(y)には{add(5+y)}が入っている
dd5(10);//実行すると15
curry(reduce,15)(5)//reduceを使ったら10

最初の関数で引数に入れた関数が実行後、結果を返すように、その関数をラップした無名関数を返す……ということでいいのかな。

引数がいくらかあるようなものを作るとしたらこんな感じかしら。

//func関数が引数3つもち、内部関数の引数が1つの場合
function curry2(func,x,y) {
	return function(z) {
		func(x,y,z);
	}
}

//func関数が引数3つもち、内部関数の引数が2つの場合
function curry3(func,x) {
	return function(y,z) {
		func(x,y,z);
	}
}

これもカリー化と呼んでいいのだろうか。。。。

最近アンドロイド勉強しています。
開発環境がwindows7 64bitで、javaもx64で、非公式eclipseを使ってます。
しかし、アンドロイドとの相性がものすごく悪い。
シュミレーターにソフトをアップロード出来ずにエラー連発。
偶然出来るか出来ないかのレベルで使い物にならず、少々悲しい。

仮想windows XPが使えるので、そっちにも環境構築して開発しています。
仮想なのでものすごく動作が鈍いですが。
XPだと全く問題がないです。
起動中のエミュレーターにもソフトアップできるし、googlemapものっそり動く。
サーバーとして潰す予定だった古いパソコンを引っ張り出してそっちでやろうかな。