我的代碼可以在今年的所有日子裏顯示。爲什麼不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