このページの下のコード部分がすぐに把握できなかったんだけど、整理するとなるほどな。と納得できた。
> 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がリスト返すところがポイントなんだな。
リンク
リンク