#ここまでのあらまし
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"をそれぞれ返し、 を返しているようです。
自作の式でもだいたい同じ挙動ですね。
Enum.empty?
Enum.empty?([])
true
Enum.empty?([1, 2, 3])
false
これは簡単ですね。引数が空ならtrue、なにか要素があればfalseをかえします。
このようすで数日のうちにEnumの関数をすべて触ってみる予定です。
うまずたゆまず、頑張ります。
Kento Mizuno