Hoogleでconcatのソースコードを読んでいたのですがソースコードの内容がよくわからなかったので質問しました。
ここで言っている分からないは「concatの使い方が分からない」ではなく「一体このソースコードが何をしているのか分からない」と言う意味です
以下がそのソースコードです。
lang
1concat :: Foldable t => t [a] -> [a] 2concat xs = build (\c n -> foldr (\x y -> foldr c y x) n xs)
以下が入出力です。
lang
1Prelude > concat [[1,2],[3,4]] 2[1,2,3,4]
では、具体的にどの部分が分からないかですが
「\c n ->」とありますがこの「c」と「n」は一体どこから引数を取っているのでしょうか?
###考えたこと
lang
1--仮にconcatに[[1,2],[3,4]]を渡した場合 2cancat [[1,2],[3,4]] = build (\c n -> foldr (\x y -> foldr c y x) n [[1,2],[3,4]]) 3 4--buildはg:[]なので恐らく最終的にこうなるのだろうか? 5concat [[1,2],[3,4]] = build(1:2:3:4) 6 7concat [[1,2],[3,4]] = 1:2:3:4:[] 8 9--そうなるとこのラムダ式は「1:2:3:4」を返す 10--じゃあ一体cとnは何なんだろうか? 11(\c n -> foldr (\x y -> foldr c y x) n xs) 12
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。