Полагаю, вы хотите реализовать это самостоятельно.В противном случае вы можете использовать множество функций в модулях Enum и List .
defmodule Test do
def nth_element(list, n) when is_list(list) and is_integer(n) do
case {list, n} do
{[], _} -> nil
{[element | _], 0} -> element
{[_ | rest], _} -> nth_element(rest, n - 1)
end
end
def nth_element(_, _), do: nil
end
Аргумент n
функции nth_element - это индекс (начинается с 0) элемента, который вы ищете.Если список пуст или у него нет элемента по указанному индексу, он возвращает nil.В противном случае функция использует сопоставление с образцом для получения элемента и остальной части списка.Если вы ищете первый элемент (index = n = 0), он вернет элемент.Если вы ищете элемент с более высоким индексом, функция будет вызываться рекурсивно с остальной частью списка и с указанным индексом минус один элемент.Таким образом, вы найдете нужный элемент в рекурсии, если n == 0. В случае, если список пуст, но n> = 0, рекурсия заканчивается из-за первого определения функции и возвращает nil.
Я сохранил модуль в test.ex.Исполнение:
$ iex
iex(1)> c "test.ex"
iex(2)> Test.nth_element([1,2,5], 0)
# => 1
iex(3)> Test.nth_element([1,2,5], 1)
# => 2
iex(4)> Test.nth_element([1,2,5], 2)
# => 5
iex(5)> Test.nth_element([1,2,5], 3)
# => nil