バカ直し

ちょっとした勘違いをメモしておく.


schemeに於いて,

手続き呼び出しは継続を伴った引数付きgotoである*1

となっているわけなんだけど,JavaScriptでもscheme的な継続を取り出せるか.

つまり,実行時の環境のスナップショットをとる,変数の束縛を記憶できるか?

ん,なんか違う気がするけど,わかってるからいいかw

で,思ったんだけど,closureを使えば,かけるんじゃない?

だって,closureってある意味,環境を保持した手続きオブジェクトを返せるじゃん.

で,こんなものを書いてみる

var fun = function () { // #1
    var i = 0;
    return function () {// #2
        return function () {// #3 
            return i++;
        };
    };
};

var funObj = fun (); // iを保持した#2
var contObj1 = funObj ();
var contObj2 = funObj ();
contObj1 ();// -> 0
contObj1 ();// -> 1
contObj2 ();// -> 2

ああ,そうだよね.あくまでもclosureは定義時の環境のネストを保持した上で

その手続きを返しているに過ぎないんだよね.

OTL

ネスト上の手続きはあくまでも同一のネスト上の環境な訳なんだよね.

アホじゃん.


継続渡しなんかではこちらの方が面白い事を書かれていますが,

やはり実行時のコンテキストを切り取るのは難しいのかな.言語仕様的に.

うーん,また暇なときに考えてみよう.

*1:オライリー刊 プログラミングgauche