継続マラソン - 継続の実装方法を考える4
arinoさんから質問を頂いた。
arino 『現在の実装では、関数の引数が別の関数呼び出しの結果になっている場合、どう処理されているのでしょう?
(func1 (func2))みたいな形。
Cの世界での再帰?
(func1 (func2) (func3))
の場合は、内部的には
apply(func1, 配列[func2, func3])
のように apply に渡されます。(疑似コードです)
更に apply の先頭で
apply(procedure, arguments)
{
foreach (argument) {
argument->eval() // ここでfunc2, func3がそれぞれ呼ばれる
}
という感じです。