CPSを律儀に実装
CPS(Continuation Passing Style)とは?登場人物は次の三つ。
- 処理A
- 引数B
- 処理C
実際にやりたいのは「処理Aに引数Bを渡して実行した後、その結果を引数として処理Cに渡して実行する」というものだとする。
function A(arg){ //do something return result; } function C(arg){ //do something return result; } function execute(){ var result = A(B); C(result); }
普通にjavascriptで書くと↑のような感じになるだろうか。それぞれの実行結果はreturnで返され、スタックに積まれた順を遡って復帰する。
function A2(arg,continuation){ var result = A(B); continuation(result); } function execute(){ A2(B,C); }
無理矢理CPS化すると↑のような感じになるだろうか。A2にはBとCを一つの引数にまとめたものが渡され、実行順が制御されている。returnによるスタック消費は必要ない。