タイトル未定
function facto(n){ if(n == 0){ return 1; }else{ return n * facto(n - 1); } } facto(5); //=> 120
// Task: 無引数関数で呼ぶとTaskかfalseが返る function tFinal(){ return false; } // Continuation: 1引数関数で、呼ぶとTaskが返る var result; function cFinal(x){ result = x; return tFinal; } // Main loop var task = tFinal; while(task){ task = task() }
function facto(n){ if(n == 0){ return 1; }else{ return n * facto(n - 1); } } // Task: 無引数関数で呼ぶとTaskかfalseが返る function tFinal(){ return false; } function makeTFacto(n, cont){ return function tFacto(){ if(n == 0){ return cont(n) }else{ return cont(n * facto(n - 1)) } } } // Continuation: 1引数関数で、呼ぶとTaskが返る var result; function cFinal(x){ result = x; return tFinal; } // Main loop var task = makeTFacto(5, cFinal); while(task){ console.log(task); task = task() } console.log(result); ----- tFacto() tFinal() 120
// Task: 無引数関数で呼ぶとTaskかfalseが返る function tFinal(){ return false; } function makeTFacto(n, cont){ return function tFacto(){ if(n == 0){ return cont(1) }else{ var cont2 = makeCMul(n, cont); return makeTFacto(n - 1, cont2); } } } function makeCMul(n, cont){ return function cMul(m){ cont(n * m) } } // Continuation: 1引数関数で、呼ぶとTaskが返る var result; function cFinal(x){ result = x; return tFinal; } // Main loop var task = makeTFacto(5, cFinal); while(task){ console.log(task); task = task() } console.log(result); ----- tFacto() tFacto() tFacto() tFacto() tFacto() tFacto() 120
これがCPSだという理解で正しいですか?>くわしいひと