使用for将新元素添加到列表中

Mis*_* Ml 1 functional-programming elixir

我不知道如何最好地在elixir中解决这个问题但是给出了一个数字来打印它的序列如下[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
Run Code Online (Sandbox Code Playgroud)

上面的代码将此返回给我:

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
Run Code Online (Sandbox Code Playgroud)

Jus*_*ood 6

Elixir的变量的范围是它们所在的"块".让我们看看你的代码看起来像什么.

n = 10
outer_list = []
for i <- 0..n - 1, do: inner_list = outer_list ++ [i]
IO.inspect outer_list
Run Code Online (Sandbox Code Playgroud)

所以价值inner_list总是[] ++ [i]因为outer_list没有被改变.当你同时命名inner_listouter_list仅命名时list,你正在隐藏变量.意思是它具有相同的名称,但基于范围的值不同.您还会收到一条警告,指出inner_list实际上并未在任何地方使用过.

你可能想做的是

n = 10
list = for i <- 0..n - 1, do: i
IO.inspect list
Run Code Online (Sandbox Code Playgroud)

虽然,你可能会更好地使用Enum.to_list/1.

n = 10
list = Enum.to_list(0..n-1)
IO.inspect list
Run Code Online (Sandbox Code Playgroud)


nei*_*esc 5

尝试使用列表推导,如:

list = for i <- 0..(n - 1) do i end
IO.inspect list
Run Code Online (Sandbox Code Playgroud)