関数を返す関数

今日はSICPの読書会が急遽中止になってしまった。
(メールに気づかないで途中までいいたw)
せっかく早く帰ってきたので、先週自社でやってる方でやったやつのメモ。

((hoge 1) 2)

のように"(("ってなっているので見たときは???だったけど
よく考えてみれば関数(手続き?)が関数を返してるんだね。

(define (hoge a)
  (lambda (x) (+ x a)))

中身はこんな感じでlambda使ってるやつ。
returnとかないし()ばっかだからわかりにくいので
JavaScriptで同じことをすると

var hoge = function (a){
  return function (x){
    return x + a;
  };
};
hoge(1)(2);

って感じ。これだと結構理解しやすいんじゃないかな。
使うシーンはほぼなさそうだけど、呼び出しの()を2つ並べると
戻り値になってる関数も実行されるんだねー。

JavaScriptってやっぱすげー。