Добавить новый элемент в список, используя для - PullRequest
0 голосов
/ 16 сентября 2018

Я не знаю, как лучше всего решить эту проблему в эликсире, но мне дано число, чтобы напечатать его последовательность следующим образом [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:

n = 10
list = []
for i <- 0..n - 1, do: list = list ++ [i]
IO.inspect list

Этот код выше возвращает мне это:

warning: variable "list" is unused
    solution.ex:8

** (UndefinedFunctionError) function Solution.main/0 is undefined or private
    Solution.main()
    (elixir) lib/code.ex:677: Code.require_file/2

Ответы [ 4 ]

0 голосов
/ 16 сентября 2018

Я добавлю еще один к миксу.

Классический Enum.map/2

n = 10
list = Enum.map(0..n-1, &(&1))
IO.inspect list

Не такой лаконичный, как Enum.to_list/1, но немного более универсальный.

0 голосов
/ 16 сентября 2018

Хотя @neisc дал хороший ответ, я бы предпочел:

list = list ++ (for i <- 0..(n - 1) do i end)

, которые добавляют что-то в исходный список, сохраняя при этом данные, которые в нем уже могут быть.

0 голосов
/ 16 сентября 2018

Переменные Elixir ограничены «блоком», в котором они находятся. Посмотрим, как это выглядит с вашим кодом.

n = 10
outer_list = []
for i <- 0..n - 1, do: inner_list = outer_list ++ [i]
IO.inspect outer_list

Таким образом, значение inner_list всегда будет [] ++ [i], потому чтоouter_list не изменяется.Когда вы назвали inner_list и outer_list просто list, вы скрываете переменную.Это означает, что оно имеет то же имя, но другое значение в зависимости от области применения.Вы также получаете предупреждение о том, что inner_list фактически нигде не используется.

Что вы, вероятно, хотите сделать, это

n = 10
list = for i <- 0..n - 1, do: i
IO.inspect list

Хотя, возможно, вам лучше обслужить, используя Enum.to_list/1.

n = 10
list = Enum.to_list(0..n-1)
IO.inspect list
0 голосов
/ 16 сентября 2018

Попробуйте использовать список пониманий , например:

list = for i <- 0..(n - 1) do i end
IO.inspect list
...