LoginSignup
2

More than 5 years have passed since last update.

Elixir~Enum総ざらい3回目~

Last updated at Posted at 2019-02-17

#ここまでのあらまし

Elixir~Enum総ざらい2回目~ のつづきです。

Enum.drop


Enum.drop([1, 2, 3], 2)
[3]

Enum.drop([1, 2, 3], 10)
[]

Enum.drop([1, 2, 3], 0)
[1, 2, 3]

Enum.drop([1, 2, 3], -1)
[1, 2]

Twitterで"dropは総和ではなく指定したindexだけ要素を落とす関数ですよ。
マイナスインデックスはrubyからの慣習で-1はラストのインデックスを指します。"
とのアドバイスいただきました。

つまり、ゼロから数えてn番目より要素を落としている...?
-1の場合、3を省いて1,2を返している...?

正確な解釈はやや遠いようです。

Enum.drop_every

Enum.drop_every(1..10, 2)
[2, 4, 6, 8, 10]

Enum.drop_every(1..10, 0)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Enum.drop_every([1, 2, 3], 1)
[]

1個目の式は、1から10で2の倍数の数字を全て返しているように思えます。
ふたつ目の式は、第二引数がゼロなのでリストのすべての数字を返しているのかな?
これもやはり3番目の式でこれまでの仮定が崩れてしまいます。

これもやはりノリとして英文のドキュメントは読めるのですが(略

drop_while

Enum.drop_while([1, 2, 3, 2, 1], fn x -> x < 3 end)
[3, 2, 1]
Enum.drop_while([1, 2, 3, 4, 2, 1], fn x -> x < 4 end)
[4, 2, 1]

ここまで2つ連続で法則性がわからなかったので自分で式を作って理解を深めてみました。
第一引数のリストのうち、最初に第二引数の数字が出てきてからのリストの残りを出力する関数のようです。
ドキュメントを通じて全部わかりませんじゃ済まないので焦った...

Enum.each

Enum.each(["some", "example"], fn x -> IO.puts(x) end)
"some"
"example"
:ok: 

Enum.each(["kento", "mizuno"], fn x -> IO.puts(x) end)
kento
mizuno
:ok

引数の"some"と"example"をそれぞれ返し、:ok: を返しているようです。
自作の式でもだいたい同じ挙動ですね。

Enum.empty?

Enum.empty?([])
true

Enum.empty?([1, 2, 3])
false

これは簡単ですね。引数が空ならtrue、なにか要素があればfalseをかえします。

このようすで数日のうちにEnumの関数をすべて触ってみる予定です。
うまずたゆまず、頑張ります。
Kento Mizuno

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
2