Эликсир является (в отличие от Java) неизменным. Тем не менее, один не может изменить какие-либо данные на месте. Также нет для l oop. Там вообще нет петель. Kernel.SpecialForms.for/1
- это понимание .
Тем не менее, если вы хотите создать новый список, вы должны сделать это явно. К сожалению, это невозможно с Kernel.SpecialForms.for/1
. Для этого мы обычно используем рекурсию.
defmodule Reverser do
def go(input, output \\ []) # header
def go([], output), do: Enum.reverse(output) # termination
def go([h | t], output), do: go(t, [h | output])
end
Reverser.go([1, 2, 3])
#⇒ [1, 2, 3]
Кроме того, здесь мы используем Enum.reverse/1
при завершении, потому что мы добавили к списку во время рекурсии, что более быстрый подход по сравнению с добавлением для связанных списков.
Sidenote: IO.puts/1
вывод может быть запутанным, используйте IO.inspect/3
вместо:
IO.inspect([1, 2, 3], label: "List")
#⇒ List: [1, 2, 3]
Sidenote # 2: ['a','b','c','d']
- список списков . Если вы хотите список символов / строк, используйте двойные кавычки . Да, значение одинарных и двойных кавычек кардинально отличается.
is_list('a')
#⇒ true
'a' == [97]
#⇒ true