置き換えモデル
置き換えモデルとは、どうやら出てくる関数を置き換えていって、最後に計算をするモデル。遅延評価といっていいのかな。
問題1.9では、引数を1増やす手続きincと引数を1減らす手続きdecをつかって、2つの整数をたす方法を置き換えモデルを使い、4と5をたす過程を示すというもの。とりあえず、関数が2つ定義されているんだけど、まずはそれをHaskellで実装
mplus x y |x == 0 = y |otherwise = 1 + ( mplus ( x - 1 ) y) mplus' x y |x == 0 = y |otherwise = mplus' ( x -1 ) ( y + 1)
incとdecは普通の足し算・引き算で実装。
では、mplusと定義したほうから。
mplus 4 5 1 + mplus 3 5 1 + 1 + mplus 2 5 1 + 1 + 1 + mplus 1 5 1 + 1 + 1 + 1 + mplus 0 5 1 + 1 + 1 + 1 + 5 1 + 1 + 1 + 6 1 + 1 + 7 1 + 8 9
この方法だと、再起終了後にいっきに計算される。
本では、このように遅延演算の列の長さがスッテプ数のようにnに比例して増加するプロ セスを線形再起的プロセスとよんでいる。
では、mplus'だとどうなるだろう?
mplus' 4 5 mplus' 3 6 mplus' 2 7 mplus' 1 8 mplus' 0 9 9
この場合だと、再起呼び出しをするたびに足されていく。
このようにステップ数がnに比例して増加するプロセスを線形反復的プロセスというらし い。