再帰的プロセスと反復的プロセス

再帰的手続きには、再帰的プロセスと反復的プロセスのふたつの種類がある(そうだ)。
階乗計算の例で言うと、

-- 階乗(再帰)
myfact_r n = if n == 1
               then 1
               else n * myfact_r (n-1)

これは遅延演算を行っている。再帰の最後になってみないと値がわからない
一方の反復的プロセスでは、再帰のひとつひとつの過程でその時点での値が得られている。
これを状態変数と呼ぶ(らしい)。

  • 反復的プロセス
-- 階乗(反復)
myfact_i n = let
             {
               myfact_iter product cnt max_cnt
                 = if cnt > max_cnt
                     then product
                     else myfact_iter (product*cnt) (cnt+1) max_cnt
             } in (myfact_iter 1 1 n)

混同しないこと。

「遅延」というのは、たぶんモナドに続くはずのキーワード。