院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

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"]