2014-07-06 78 views
1

在喬·阿姆斯特朗的書,在章節12.7結束時,他說:尾遞歸編程二郎第2版,喬·阿姆斯特朗

「避免,這是很容易;如果你寫一個函數F從不返回(如環()),確保在調用F之後永遠不會調用任何東西,也不要在列表或元組構造函數中使用F.

摘錄自:Joe Armstrong。 「編程Erlang,第二版」。

他是什麼意思:「並且不要在列表或元組構造函數中使用F.

感謝

+1

請給我們更多的背景。我沒有在我面前的書。你試圖避免什麼? – loxs

回答

4

我沒有這本書,但是從字面上就意味着你必須避免以下幾種情況:

loop() -> 
    receive 
     M -> do_stuff() 
    end, 
    loop() 
end. 

some_func() -> 
    foo(), 
    loop(), 
    % Don't do this 
    bar() % bar will never be called 
end. 

other_func() -> 
    % Don't do this 
    T = {test,loop()}, % T will never be created 
    % Nor this 
    L = [loop()|lists:seq(1,12)] 
end. 

注:這有什麼好做的提到的尾遞歸問題的標題。在這個例子中,函數循環/ 0是尾遞歸的。

+1

謝謝。這是有道理的。我想他的意思是不這樣做: 環路() - > 收到 米 - > do_stuff() 結束, [環路()|列表:SEQ(1,12) 結束。 – antipatreal