我的代码可以在今年的所有日子里显示。为什么不init:stop()直接终止?
我不明白为什么if NewSec =< EndSec -> init:stop() end
没有在run_calendar中第一次执行?
我希望init:stop()可以被第一次执行,但事实并非如此。
有什么不对?
代码:
-module(cal).
-export([main/0]).
main() ->
StartSec = calendar:datetime_to_gregorian_seconds({{2009,1,1},{0,0,0}}),
EndSec = calendar:datetime_to_gregorian_seconds({{2009,12,31},{0,0,0}}),
run_calendar(StartSec,EndSec).
run_calendar(CurSec, EndSec) ->
{Date,_Time} = calendar:gregorian_seconds_to_datetime(CurSec),
io:format("~p~n", [Date]),
NewSec = CurSec + 60*60*24,
if NewSec =< EndSec -> init:stop() end,
run_calendar(NewSec, EndSec).
结果:
wk# erlc cal.erl
wk# erl -noshell -s cal main
{2009,1,1}
{2009,1,2}
{2009,1,3}
{2009,1,4}
{2009,1,5}
...
{2009,12,22}
{2009,12,23}
{2009,12,24}
{2009,12,25}
{2009,12,26}
{2009,12,27}
{2009,12,28}
{2009,12,29}
{2009,12,30}
{2009,12,31}
wk#
为什么你不要只是改变如果**不**调用'run_calendar/2'递归:'如果NewSec = < EndSec ->好的; true - > run_calendar(NewSec,EndSec)end.',你的程序将正常退出而不会出现奇怪的行为。 – 2009-11-27 10:07:50