2013-05-13 115 views

回答

6

最好的選擇是讀取let,let *和letrec的official R5RS descriptions

總之,但是:

(let ((x 2)) 
(let ((x 3) (y x)) 
    y) => 2 

(let ((x 2)) 
(let* ((x 3) (y x)) 
    y) => 3 

所以,讓讓之間的差異*:咱們都將對於綁定評估上述水平(因此它不會不管他們正在上市爲了什麼in),讓*按順序執行。 (let *((xa)(by)))等價於(let((xa))(let(by)))

另一方面,Letrec允許您綁定遞歸值。你可能會寫一個遞歸函數,你只想在函數範圍內,並使用letrec將它綁定到一個名字上。