Elixir:以编程方式生成列表名称

时间:2018-04-16 19:39:42

标签: elixir

在Elixir中,我想创建一个可变数量的列表,这些列表的开头相同。我想以编程方式命名,例如

LIST1 = 1,2,3

LIST2 = 1,2,3等

我正在尝试的编码方法如下。这可以在Elixir中完成还是禁止使用?

n = IO.gets("Enter number of lists: ") |> String.trim_trailing
n = String.to_integer(n)

generatelistnames(n,1)

def generatelistnames(0,0), do: nil
def generatelistnames(numberofnodes,1) do
if (numberofnodes < 1) do
   loop(0,1)
 else
    listname = "LIST"+Integer.to_string(numberofnodes)
    listname = [1,2,3]
    IO.puts "#{listname}"
    loop(numberofnodes-1,1)
  end
end

1 个答案:

答案 0 :(得分:2)

您的问题实质上是关于生成列表并为这些列表提供一些命名。我假设这些列表的命名纯粹是与UI相关的,例如用户输入一个数字,创建一些列表,每个列表都打印出一个名称。

在这种情况下,一般来说,编程时需要将您的疑虑分开。生成列表存在问题,并且存在UI的问题。

在你的伪代码方法中,你试图同时解决这两个问题,而你可能会考虑这样的事情:

defmodule MyList do 
  def generate(amount) do
    1..amount
    |> Enum.map(fn e -> 
       # Keep track of the number and produce a list. Currently the list produced is simply hardcoded, but you can modify in any way you want.
      {e, produce_a_list()}
    end)
  end

  def run do
    3
    |> generate()
    |> output()
  end

  defp output(lists) do
    lists
    |> Enum.each(fn {nr, a_list} -> 
      IO.inspect("LIST_#{nr}: ")
      IO.inspect(a_list)
    end)  
  end

  # Replace in any way you want to create the list, randomly or by some previously generated list ....
  defp produce_a_list do
    [1,2,3,4]
  end
end

要查看示例,您可以像这样运行它: MyList.run 这将使你像这样:

"LIST_1"
[1, 2, 3, 4]
"LIST_2"
[1, 2, 3, 4]
"LIST_3"
[1, 2, 3, 4]