1

我是二郎的初学者。这是我的代码:

-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)
4

3 回答 3

3

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

main() -> {ok,[T]} = io:fread("","~d"), io:fwrite("~p~n",[ssum(T)]).
于 2013-10-09T04:27:35.300 回答
1

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

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

于 2013-10-09T04:45:32.627 回答
0

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

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

于 2013-10-09T07:40:09.053 回答