【问题标题】:Erlang Printing N timesErlang 打印 N 次
【发布时间】:2018-12-12 12:20:26
【问题描述】:

我正在尝试自学一些 erlang,但我不断收到我不理解的错误。

我正在尝试制作一个接受整数 N 并打印“Hello World”N 次的函数,这样我就可以热交换消息(还没有到达那部分)。

我的代码:

-module(repeater).
-export([repeat/1], [start/0]).

repeat(Num) when is_Integer(Num), Num > 0 ->

    if Num == 1 ->
        io:fwrite("Hello World"),
        io:fwrite("~n");

     else ->
        io:fwrite(pass(Num - 1));

     true ->
        io:fwrite("I have no idea what is happening")

     end.

start() ->
    repeat(3).

我得到的错误信息是:

 repeater.erl:7: bad export declaration 
 repeater.erl:11: Warning: function pass/1 is unused
 repeater.erl:21: Warning: function start/0 is unused

我不知道为什么它说它是“未使用”。

我发现这种语言很难为自己学习,因为我什至无法让 if else 块正常工作

【问题讨论】:

    标签: recursion erlang


    【解决方案1】:

    尝试替换
    -export([repeat/1], [start/0]).

    -export([repeat/1, start/0]).

    关于守卫表达式,您在is_Integer() 中有错字,应该是is_integer()

    关于您的if 条件,
    使用else -> io:fwrite(pass(Num-1)) 毫无意义。除了true 之外的任何原子都计算为false,所以除了true 之外的任何原子在这里都是无用的。 if 需要至少有一个子句评估为 true 并且因为你已经有一个包罗万象的子句 true -> io:fwrite("I have no idea what is happening") 如果 Num 大于 1 将被调用,你不需要任何其他条款

    【讨论】:

    • 这阻止了这些错误!但现在代码评估为真实情况,如果我将 3 作为参数传递,我觉得不应该发生这种情况?
    • 你能把“pass()”的定义加到你的帖子里吗?
    • 对不起,pass应该是repeat(),我改了名字是因为我不喜欢pass作为这个帖子的函数名/在考虑之后一般来说
    • 另外,我得到“非法守卫表达式”,你认为是 Num > 0 还是 is_Integer(Num)?
    • @Geedubs123,is_Integer 无效。见the docs
    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 2016-02-19
    • 2020-08-16
    • 1970-01-01
    • 2012-06-26
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多