2013-10-09 47 views
1

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

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

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

我不是太熟悉,二郎,但如果它是在所有可能对于T为负,那么你的递归函数永远不会结束。

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

0

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

erlang文档相当不错。 io:fread/2在http://erlang.org/doc/man/io.html#fread-2