Skip to content

Commit 780ad5d

Browse files
committed
Accumulate multiple lists
1 parent a243eee commit 780ad5d

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

exercise_2.36.exs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
defmodule Accumulate do
2+
def accum(_op, init, []), do: init
3+
def accum(op, init, [head | tail]), do: op.(head, accum(op, init, tail))
4+
5+
def accum_n(_op, _init, [ [] | _tail]), do: []
6+
def accum_n(op, init, list) do
7+
heads = Enum.map(list, &(hd &1))
8+
tails = Enum.map(list, &(tl &1))
9+
[ accum(op, init, heads) | accum_n(op, init, tails) ]
10+
end
11+
end
12+
13+
ExUnit.start
14+
15+
defmodule AccumulateTests do
16+
use ExUnit.Case, async: true
17+
18+
test "it accumulates multiple sequences" do
19+
sequences = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
20+
assert Accumulate.accum_n(&(&1 + &2), 0, sequences) == [22, 26, 30]
21+
end
22+
end
23+

0 commit comments

Comments
 (0)