関数プログラミングの勉強 http://p0t.jp/mt/archives/2007/01/post_545.html
を見て、ふと思いたって考えてみた。
継続(continuation)って未だによくわかってないんだけど、このへんを読んだ。
SchemeとActor理論 http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/actor/actor.html
なんでも継続 http://www.shiro.dreamhost.com/scheme/docs/cont-j.html
継続渡しによるWebアプリケーション http://www.kahua.org/kahua/docserv/seminar200402/cps/index.html
なんでも継続、ActionScript で。http://torus.jp/memo/x200403/nandemo_keizoku_as.rd.html
むずしい。むずかしすぎる。
考えてるとすぐわけわかんなくなってくる。
そもそもSchemeが分かってないし。
で、factを継続渡しスタイルで書くとたぶんこんなふう。
function factCPS(n, k) { if (n == 0) { return k(1) } else { return factCPS(n - 1, function(u) {return k(u * n)}) } }
console.logを直でfactCPSに渡すとエラーになったのでlogをつくった。
var log = function(x){console.log(x)} for (var i = 0; i <= 10; i++) { factCPS(i, log) }
「なんでも継続、ActionScript で。」のひとも書いているけれど、
returnを書くのが面倒くさい。一個、書き忘れて軽くはまった。
いちおう計算はできてるけど、これでいいのかな。