タグ

ブックマーク / pllab.is.ocha.ac.jp (1)

  • Asai Laboratory, Ochanomizu University

    第二回 「末尾呼び出し(tail call)と継続渡し形式(Continuation Passing Style)」 継続とは何ぞということをなんとなくでもいいので把握しておきましょう! というのが今回の内容です。 (継続の話に入る前に、まずは末尾呼び出しの話をします。) 階乗を求める関数 fac は次のように書けます。 let rec fac n = if n = 0 then 1 else n * fac (n - 1) これを実行、例えば fac 3 等とすると、 fac 3 -> 3 * fac 2 -> 3 * (2 * fac 1) -> 3 * (2 * (1 * fac 0)) -> 3 * (2 * (1 * 1)) -> 3 * (2 * 1) -> 3 * 2 -> 6 といった感じで計算が進みます。 このプログラムは再帰の度にスタックを使っています。 つまり、fac

  • 1