【问题标题】:erlang an error occurred when evaluating an arithmetic expressionerlang 计算算术表达式时发生错误
【发布时间】:2013-10-09 15:40:09
【问题描述】:

我是 erlang 的初学者。 这是我的代码:

-module(squsum).
-export([main/0]).

ssum(1) -> 1;
ssum(N) -> N*N + ssum(N-1).

main() ->
    {_,T} = io:fread("","~d"),
    io:fwrite("~p~n",[ssum(T)]).

为什么会有这样的问题?

** exception error: an error occurred when evaluating an arithmetic expression
     in function  squsum:ssum/1 (squsum.erl, line 5)
     in call from squsum:main/0 (squsum.erl, line 9)

【问题讨论】:

    标签: erlang


    【解决方案1】:

    T是一个包含值的列表,我猜是IO:fwrite的对称观点。所以简单地使用:

    main() -> {ok,[T]} = io:fread("","~d"), io:fwrite("~p~n",[ssum(T)]).
    

    【讨论】:

      【解决方案2】:

      我对 erlang 不太熟悉,但如果 T 有可能为负数,那么您的递归函数将永远不会结束。

      同样,如果 T=0,函数永远不会结束。

      【讨论】:

        【解决方案3】:

        这真的是对 Pascal 答案的评论:只是添加 io:fread/2 返回格式字符串中指定的术语列表 --- 即使格式字符串只有一个术语,它也会返回一个列表一个元素。

        erlang 文档非常好。 io:fread/2 在http://erlang.org/doc/man/io.html#fread-2

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-27
          • 2011-01-25
          • 2020-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多