Keep on moving

あんまりまとまってないことを書きますよ

Camlspotterさんの高階関数パズルについてJSで考えてみたが、よくわからない話

Python Hack-a-thon 2010.07 : ATNDでcamlspotterさんがプレゼンしていた内容を考えてみたのですが、
実際にOCamlで実行した結果がなぜああいう値になるのかよくわかりませんでした。*1

その後、エントリーで説明されていますね。

高階関数クイズ - Oh, you `re no (fun _ → more)
高階関数パズルの解説 - Oh, you `re no (fun _ → more)

理屈がよくわからないのでJavaScriptで書いて考えて見ようとしたのですが、どうやってもうまくいきませんorz
検索してみるとさんがPythonの例を書いているじゃないですか!
喜び勇んでJavaScriptで書いてみました。

var add1 = function(x){
    return x + 1;
};

var twice = function(f){
  return function(x){
    return f(f(x));
  }
};

console.log(
  twice(twice)(twice)(twice)(add1)(0)
);

皆さんはわかりましたか?私は説明を読んでも未だにうまく理解できていません。
そのうちでいいのでちゃんと理解できるようになりたいです。
そうそうこの問題の2つの罠は両方ひっかかってしまいましたorz

*1: 2乗になると思ったんですよorz