*多重再帰の打ち切り [#u5188c30]
多重再帰構文を, 数値関数で打ち切ることを考えましょう. 例えば
 f(X,T):[1]X[2]f([3]f(sX,T-1),[4])
という関数定義ですね. 多重再帰が常に2段階読み込まれるように, さらに[3]を定数にしてみましょう. 
 f(X,T):[1]X[2]f([3]f(sX,T-1),10)
さて, この関数を適当な初項で実行することを考えます. すると, ~
全ての数値が1以上である間は, 数値のない多重再帰
 f(X):[1]X[2]f([3]f(sX))
と同じように振る舞います. そこで, 数値0が現れる瞬間を観察しましょう. 

 f(X,1) = [1]X[2]f([3]f(sX,0),10) = [1]X[2]f([3],10)

数値が0になり, 多重再帰にならなくなった瞬間, ''新たにf([3],10)という関数に突入する''ことが分かります. ~
したがって, この構文は (特殊な初項のあと) ''無限ループに突入する''ことが分かります.


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS