2010-09-17 34 views
4

我有幾本關於Scheme的書,其中一些提到了let和letrec,但沒有一個會給出一個令人信服的例子(我的意思是,什麼時候以及爲什麼要用另一個)。 有沒有letrec/named let比內部定義或甚至外部輔助程序更好的選擇?letrec的常見用法,名爲let和internal定義?

回答

7

你使用哪一個主要是風格問題。

我經常沒有發現自己使用letrec,只是更喜歡內部定義。我經常使用named let來編寫尾遞歸循環,類似於這個無意義的循環。

(let loop ((var init) (other-var other-init)) 
    (cond 
    ((done? var) var) 
    ((finished? other-var) other-var) 
    (else (loop (modify var) (manipulate other-var))))) 

你可以做一個letrec或內部定義是相同的,但我覺得這是一個最簡單的閱讀。

letrec在宏擴展到您不想創建的地方定義時很有用。

0

也許你可以找到這些形式之間的區別最好的解釋是this