再帰的プロセスと反復的プロセス
再帰的手続きには、再帰的プロセスと反復的プロセスのふたつの種類がある(そうだ)。
階乗計算の例で言うと、
- 再帰的プロセス
-- 階乗(再帰) 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)
混同しないこと。
「遅延」というのは、たぶんモナドに続くはずのキーワード。