[過去ログ]
関数型プログラミング言語Haskell Part32 (1002レス)
関数型プログラミング言語Haskell Part32 http://mevius.5ch.net/test/read.cgi/tech/1548720347/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
169: デフォルトの名無しさん [sage] 2019/02/22(金) 19:43:58.95 ID:LKaW/yz7 >>168 foldlなんて単なるループみたいなもんだし 今どきJavaでもやるくらい 分かるまでは変に抽象化しないで、具体例で考えるといいよ folder_left f a [a1 a2 a3] じゃなくて folder_left (+) 0 [1, 2, 3] で考えるとか そしたら folder_left f (f a a1) [a2, a3]は folder_left (+) ((+) 0 1) [2, 3]になる 要は最初に int sum = 0 for(int a : xs) sum = sum + a と書くのと変わらない sumへの蓄積を、変数への再代入ではなく次の関数への引数として書いてるだけ どちらかというと、いわゆる関数型っぽいのはこういうのよりfoldrでリスト作ったりするときの方かな http://mevius.5ch.net/test/read.cgi/tech/1548720347/169
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
174: デフォルトの名無しさん [sage] 2019/02/22(金) 20:30:54.11 ID:LKaW/yz7 >>173 そこらへんは評価戦略の話であって別件だね 再帰の本質ではないよ Haskellといえば遅延評価みたいなところがあるから混乱しやすいけどね 上で言うならz3こと(f (f (f a a1) a2) a3)を、最後までこの形で持って行って、最後にまとめて計算するのが遅延評価 上で書いたみたく適宜評価していくのが正格評価 Haskellだとfolder_leftは二種類あって、 遅延評価版がfoldl 正格評価版がfoldl' ぶっちゃけ左畳み込みに関してはfoldlを使うことはない 全部foldl'でいい http://mevius.5ch.net/test/read.cgi/tech/1548720347/174
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.040s