Haskell accumulatorがリストとなるfold関数の学習

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

employment.en-japan.com

このページの下のコード部分がすぐに把握できなかったんだけど、整理するとなるほどな。と納得できた。

> foldl plusEach [0] [[1, 11], [1, 11], [3]]
[5,15,15,25]


整理

plusEachの定義はページとは違うけど要約するとこんな感じ。2つのリストを総当たりで和をとる。

plusEach xs1 xs2 = [x+y|x<-xs1, y<-xs2]


fold1回目 accumulatorは[0]

plusEach [0] [1,11]
[1, 11]

で、accumulatorが[1, 11]となるので...

fold2回目 accumulatorは[1, 11]

plusEach [1,11] [1,11]
[2, 12, 12, 22]

fold3回目 accumulatorは[2, 12, 12, 22]

plusEach [2, 12, 12, 22] [3]
[5, 15, 15, 25]

なるほどなあ。

折りたたみを行う関数、plusEachがリスト返すところがポイントなんだな。