関数型言語Part2
■ このスレッドは過去ログ倉庫に格納されています
0606604
NGNG長文なので興味がない人は無視してけろ。非ドキュソ大の数学科や情報科学科なら
そういう授業があると思うが、みんな興味を持たないので人気がない…
まずは高校数学の復習(?)から。
a_{n+1} = 0.5 a_n + 1
という漸化式を考える。_nとか_{n+1}とかは下付きの添字ね。
a_nのn→∞での極限は2になるんだが、これは
f(x) = 0.5 x + 1
なる関数fの不動点なんだ。いいかえると、
x = 0.5 x + 1
って方程式の解が極限になってる。
直観的には「数列が収束するあたりでは値が一定になる」って感じ。
さて、じゃあ再帰的関数の例として、
fact(i) = if i <= 2 then 1 else i * fact(i-1)
なる関数factを考える。このfactはどんな関数なんだ?って知りたかったら、
fact(i) = if i <= 2 then 1 else i * fact(i-1)
= if i <= 2 then 1 else i * (if i-1 <= 2 then 1 else (i-1) * fact(i-2))
= if i <= 2 then 1 else i * (if i-1 <= 2 then 1 else (i-1) * (if i-2 <= 2 then 1 else (i-2) * fact(i-3)))
= ...
みたく、再帰的定義をどんどん展開してみればいいわけだ。
こうやって展開した極限が、factの意味になる。
再帰的定義を展開していった極限を考えているのでであって、
fact(i)のi→∞での極限とは違うので、混同しないように注意。
だから、factって再帰的関数は、
f_n(i) = if i <= 2 then 1 else i * f_{n-1}(i-1)
みたいな漸化式で定義される関数列f_nの、n→∞での極限になるわけだ。
ただし初項f_0(i)は常にエラーを返すってことにしておく。
いいかえると、
F(f) = if i <= 2 then 1 else i * f(i-1)
なる作用素Fの不動点がfactなんだ。以上。
って、こんな説明じゃ元から知ってる人しかわからないか…
■ このスレッドは過去ログ倉庫に格納されています