ここまでのあらまし
わけあって、既存のドキュメントでの学習がペンディングになっています。
そこで、 Elixir公式ドキュメント から前回扱ったStreamの関数のなかで、Enumで出てきたものをピックアップすることにしました!
Stream.map
iex>stream = Stream.map([1, 2, 3], fn x -> x * 2 end)
iex> Enum.to_list(stream)
[2, 4, 6]
これは1,2,3からなるマップに2をかける関数でしょうか。
しかしEnumから比べると2行目の存在意義が自分ではいまひとつわかりません。
一行目だけでiexをEnterすると[1, 2, 3]の答えが出力されます。
Stream.filter
iex>stream = Stream.filter([1, 2, 3], fn x -> rem(x, 2) == 0 end)
iex> Enum.to_list(stream)
[2]
こちらは2で割ってあまりがゼロになる答えとして[2]が出力されているのでしょう。
しかしやはりEnumからすると2行目の存在意義がよくわかりません。
1行目だけでiexをEnterすると[1, 2, 3]の答えがかえってきます。謎だ...。
2行目の処理もStream.mapのときと同じです。
Stream.zip
concat = Stream.concat(1..3, 4..6)
iex> cycle = Stream.cycle([:a, :b, :c])
iex> Stream.zip(concat, cycle) |> Enum.to_list()
[{1, :a}, {2, :b}, {3, :c}, {4, :a}, {5, :b}, {6, :c}]
こちらに関しては、ドラムシーケンサーを作る際にEnum.zipを使いましたが、それと似て1..3、4..6とa, b, cの順当な組み合わせをすべて出力しているように思えます。
まだまだ英語のドキュメントの読解が足りないのと、Elixirそのものの重要な知識が欠落しているのでしょうか。
うまずたゆまず、頑張ります。
Kento Mizuno