mapとreduce
抽象度
reduce > map
どう使い分ける
map
配列の各要素に関数を当てた配列を返すとき
注目するのはその要素に何をするかだけ
(map_sqrt : list(int) => list(int), map_mod2 : list(int) => list(bool) )
reduce
1,配列をなにかに変換するとき
(sum : list(int) => int, length : list('a) => int )
2,結果を返したいforEach
mapでできるかを考え、無理だったらreduceを検討
比較
let rec pre = (n, x) => n == 0 ? [] : [x, ...pre(n - 1, x)]; let repliMap = (list, n) => list |> List.map(el => pre(n, el)); let repliReduce = (list, n) => list |> List.fold_left((acc, cur) => acc @ pre(n, cur), []); repliMap(["a", "b", "c"], 3); - : list(list(string)) = [["a", "a", "a"], ["b", "b", "b"], ["c", "c", "c"]] repliReduce(["a", "b", "c"], 3); - : list(string) = ["a", "a", "a", "b", "b", "b", "c", "c", "c"]