LoginSignup
5
2

More than 5 years have passed since last update.

Elixir ~新春Streamまつり~

Last updated at Posted at 2019-02-15

ここまでのあらまし

わけあって、既存のドキュメントでの学習がペンディングになっています。
そこで、 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

5
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2