【问题标题】:Collect an input to list with Erlang收集输入以使用 Erlang 列出
【发布时间】:2015-06-24 01:13:14
【问题描述】:

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

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.

【问题讨论】:

标签: erlang


【解决方案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> 

【讨论】:

  • 非常感谢!你能推荐一篇关于 erlang 标准库的好文章(或书)吗?从我的角度来看,文档真的很奇怪(描述性太强,示例很愚蠢)
  • @kharandziuk 我对 Erlang 中的标准 io 真的一无所知,我阅读了 Amstrong 的书并为伟大的代码学习了一些 Erlang,然后我通过教学继续学习,我正在构建 erlang截屏视频,但使用西班牙语,为此我浏览了模块的不同文档,并检查了不同 erlang 模块的源代码(它的开源,因此您可以检查 io 模块的文档和代码),除此之外, 谷歌搜索加入的随机博客
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多