[過去ログ] 関数型プログラミング言語Haskell Part32 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(2): デフォルトの名無しさん [ageteoff] 2019/01/29(火) 09:05:47.90 ID:gJP/u7IJ(1/3) AAS
関数型プログラミング言語 Haskell について語るスレです。

haskell.org (公式サイト)
外部リンク:www.haskell.org
日本Haskellユーザーグループ
外部リンク:haskell.jp

前スレ
関数型プログラミング言語Haskell Part31
2chスレ:tech
26: デフォルトの名無しさん [sage] 2019/02/03(日) 21:28:01.94 ID:DVkCUlxV(4/11) AAS
>>23
23(4): デフォルトの名無しさん [sage] 2019/02/03(日) 21:25:18.35 ID:5bolWXfM(5/36) AAS
>>19
理解したのは>>9の通りで
仮定として1かtrueを返したら再帰は止まる仕様になってると推測してる

>>20
だからfact(1)で無限に続いちゃうよね
1 - 1で fact 0をevalしてまたfact(1)になる
そこで終了条件が必要だけど何にも書いてないから記述通りならずーっと続く

としか見えないんだよね
>1 - 1で fact 0をevalしてまたfact(1)になる
ならねーよ そこが恥ずかしいところだ
28
(1): デフォルトの名無しさん [sage] 2019/02/03(日) 21:29:11.55 ID:RwDwNYzW(3/27) AAS
>>23

>>>20
20(2): デフォルトの名無しさん [sage] 2019/02/03(日) 21:20:07.09 ID:RwDwNYzW(2/27) AAS
>>15

ほとんど同じ説明だが…

関数の定義が
fact 0 = 1
fact n = n * fact(n - 1)
となっている。
このとき、左辺が右辺に置き換えられる (簡約という)

つまり fact 3 は 3 * fact 2 に置き換えられる
そして fact 2 は 2 * fact 1 に置き換えられる
そして fact 1 は 1 * fact 0 に置き換えられる
ひとつめの関数の定義により、fact 0 は 1 に置き換えられるので
置き換えはここでとまる

以上をまとめると
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
>だからfact(1)で無限に続いちゃうよね
>1 - 1で fact 0をevalしてまたfact(1)になる
>そこで終了条件が必要だけど何にも書いてないから記述通りならずーっと続く

そうはならない

fact 1 = 1 * fact 0
に簡約される

そして
fact 0 = 1 であって
fact 0 = 0 * fact(0 - 1) とは絶対にならないからここで終わる

高校数学がわかるなら、漸化式と同じだと思えばよい
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.052s