[過去ログ]
関数型プログラミング言語Haskell Part32 (1002レス)
関数型プログラミング言語Haskell Part32 http://mevius.5ch.net/test/read.cgi/tech/1548720347/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
172: デフォルトの名無しさん [sage] 2019/02/22(金) 20:17:22.94 ID:LKaW/yz7 >>171 folder_left f (f a a1) [a2, a3] になるところまではわかるんだよね? そしたらまず括弧の中から先に計算するのはどの言語も普通だよね だから先に(f a a1)の答えが出る fは引数を2つとる関数だから、答えを出すのに支障はないよね ここで(f a a1)の計算結果をz1としようか そしたら上の式は folder_left f z1 [a2, a3]になるよね? そうすると、f、z1、[a2, a3]の3つの引数を使って、folder_leftがまた呼び出されるのがわかる?ここが再帰ね folder_leftの定義は2つあるけど、[a2 a3]は空リスト([])じゃないから、下の folder_left f a (x:xs)の方が呼ばれるよね? ここでaはz1、xはa2、xsは [a3]だよね だからベタで書くと folder_left f (f z1 a2) [a3]になるよね? 同じように括弧の中が先に計算されるから、(f z1 a2)をz2としようか そしたら folder_left f z2 [a3]となる また全く同じようにfolder_leftを呼び出すと、次は folder_left f (f z2 a3) []となる そして同じように(f z2 a3)をz3とすると、 folder_left f z3 []と書ける ここでまたまたfolder_leftを呼び出してるわけだけど、最後のリストが空リストだよね だからfolder_leftの2つの定義の内、上の方のfolder_left _ a [] = aが呼ばれる 上から順に呼び出し条件を見てるからね ここでaはz3のことだから、最終的にz3が答えになる じゃあz3が何かっていうと、(f z2 a3)だよね。そしてz2が何かっていうと、(f z1 a2)だよね つまりz3は(f (f z1 a2) a3)のことだ そして最後にz1は(f a a1)だから、結局 z3 == f (f (f a a1) a2) a3となる これでどうだ http://mevius.5ch.net/test/read.cgi/tech/1548720347/172
173: デフォルトの名無しさん [sage] 2019/02/22(金) 20:22:50.89 ID:ioyynd1U >>172 ()の中って完全に展開されるまで実行されないものと思ってた 例題もそんな書き方だったし これならわかる! ありがとう http://mevius.5ch.net/test/read.cgi/tech/1548720347/173
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.044s