使用Erlang收集列表的输入

时间:2015-06-23 16:24:55

标签: erlang

我需要创建一个程序,从控制台读取数字并将它们收集到列表中。 例如,输入:

1
2
3
4

程序应返回[1, 2, 3, 4]。 算法非常简单:

  • 读取输入
  • 如果输入不为空,请将其按列表
  • else在列表中返回结果

我认为该程序应该是这样的(对于我不知道如何写的部分#):

read(L)->
  case io:fread("", "#what format")
    #number case ->
     read([N|L])
    #empty case ->
     lists:reverse(L)
  end.

1 个答案:

答案 0 :(得分:1)

您可以定义递归函数,如

-module(test).
-compile(export_all).

input(Acc) ->
    Data = io:get_line(""),
    Data2 = lists:sublist(Data, length(Data) - 1),
    case string:len(Data2) of
        0 ->
            Acc;
        _ ->
            input(Acc ++ [Data2])
    end.

解决了这个问题:

rorra:~/erlang > erl
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V6.4  (abort with ^G)
1> c(test).
{ok,test}
2> test:input([]).
hello
world

["hello","world"]
3>