erlang在计算算术表达式时发生错误

时间:2013-10-09 04:13:15

标签: erlang

我是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)

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

我对erlang不是很熟悉,但如果T很可能是负数,那么你的递归函数永远不会结束。

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

答案 2 :(得分:0)

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

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