Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@kmizuno0211

Elixir ~新春Streamまつり~

ここまでのあらまし

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?