listを受け取ったときの定石2つ
1,パターンマッチング
先頭のみで処理が完結するとき
2,reduce(fold_left)
先頭以外の要素にも同様の処理をする必要があるとき
図にしてみると、このreduceの使い方はパターンマッチングを複雑にしただけだね
先頭だけで済む「組み合わせ」はパターンマッチングでやり、
残りの要素も必要な「順列」はfold_leftでやる
追記
ちょっと違うな
reduceは使い方が2種類ある
1,hdとf(rest)で結果が求まるもの
2,List.iterの結果をまとめるもの