foldl (flip f) b [a]

  • foldl (flip f) b [a] という処理がよくわからなかった
  • foldl にはfoldlかfoldl'かというような問題もあるようだが、ここでは、そんな(多分高級な)問題は関係なく、foldlの基本を確認する
  • 関数 f として(-) 引き算を使う
foldl (-) 10 [] -- 10:[]内に何もないときは、(-)の最初の引数が返る
foldl (-) 10 [1] -- = foldl (-) ( 10 - 1) [] = 9のこと。リストの先頭から値 v を取り出し、(-) 10 v = 10 -vを計算し、リストの要素を減らしたリストを残している
foldl (-) 10 [1,2] -- = foldl (-) (10 - 1) [2] = foldl (-) 9 [2] = foldl (-) (9-2) [] = 7
  • 関数 f として flip (-) を使う
    • (flip) (-) 10 3 : これは、3-10のこと
foldl (flip (-)) 10 [] -- 10 : []内に何もないので、( flip (-) ) の最初の引数が返る
foldl (flip (-)) 10 [1] -- = foldl (flip (-)) (1-10) [] = -9 リストの最初の値を取り出し、(flip (-)) 10 v = v-10を求める
foldl (flip (-)) 10 [1,2] -- = foldl (flip (-)) (1-10) [2] = foldl (flip (-)) (-9) [2] = foldl (flip (-)) (2-(-9)) [] = 11
foldl (flip (-)) 10 [1..3] -- = foldl (flip (-)) 11 [3] = 3-11=-8