之間的區別困惑誰能解釋一下這個區別嗎?我不認爲我理解我諮詢過的教科書/網站的概念。讓與讓*在計劃
讓與讓*在計劃
回答
如果使用let
,則不能引用先前在同一個let
表達式中定義的綁定。例如,這是不行的:
(let ((x 10)
(y (+ x 6))) ; error! unbound identifier in module in: x
y)
但是如果你使用let*
,它可以參考以前的綁定在同一個let*
表達:
(let* ((x 10)
(y (+ x 6))) ; works fine
y)
=> 16
這是文件中的所有here。
我在文檔中看不清楚(你的鏈接點,當前版本5.3.6),所以我也很困惑。 'let'的文檔中說:「第一種形式從'val-exprs'從左到右評估......」,所以並不清楚它們是否被並行評估。 – Alexey 2014-01-03 10:03:48
@Alexey它不會並行評估它們。正如文檔所說,*「第一種形式從左到右評估'val-exprs',爲每個'id'創建一個新位置,並將這些值放到位置」* - 意思是,首先評估它們並且收集結果值,並且只爲每個*'id' *創建***然後***新位置,並且將這些值分別放置在其位置中。如果*'val-exprs' *中的一個突變存儲器(即數據,如列表或結構體),則仍然可以看到序列性。 – 2017-01-07 14:07:11
Let
平行,(種;見下文)let*
是連續的。 Let
翻譯爲
((lambda(a b c) ... body ...)
a-value
b-value
c-value)
但let*
作爲
((lambda(a)
((lambda(b)
((lambda(c) ... body ...)
c-value))
b-value))
a-value)
,並因此創建嵌套範圍塊,其中b-value
表達可以指a
,並c-value
表達可以指兩個b
和a
。 a-value
屬於外部範圍。這也相當於
(let ((a a-value))
(let ((b b-value))
(let ((c c-value))
... body ...)))
還有letrec
,允許遞歸綁定,其中所有變量和表達式屬於一個共享範圍,並且可以相互引用(與關於初始化一些注意事項)。它相當於要麼
(let ((a *undefined*) (b *undefined*) (c *undefined*))
(set! a a-value)
(set! b b-value)
(set! c c-value)
... body ...)
(in Racket,也可如方案letrec*
,由於R6RS),或
(let ((a *undefined*) (b *undefined*) (c *undefined*))
(let ((_x_ a-value) (_y_ b-value) (_z_ c-value)) ; unique identifiers
(set! a _x_)
(set! b _y_)
(set! c _z_)
... body ...))
(in Scheme)。
更新:let
實際上並沒有實際評估它的值表達式,而只是它們都在let
窗體出現的相同初始環境中進行評估。這也是從lambda
基翻譯明確:第一值表達式進行求值的每個在相同的,外部環境,並收集所得的值,並且僅然後新的位置爲每個ID創建並將這些值放在每個位置。如果其中一個值表達式對一個存儲器(即數據,如列表或結構體)進行變異,我們仍然可以看到序列性。
- 1. 計劃,讓語法
- 2. 計劃作用域(定義和讓)
- 3. 讓Cabal-Install顯示安裝計劃
- 4. 如何讓SQL Server計劃作業在Windows註銷時運行?
- 5. 如何讓先進水平的測試計劃(腳本)與情景
- 6. 與計劃
- 7. 計劃與0000005
- 8. Java銀行計劃。如何讓客戶擁有多個賬戶?
- 9. 使用MassTransit讓消費者脫機(計劃中斷)
- 10. [R計劃 - 讓依賴於另一列特定值
- 11. 替代計劃讓indexPath = NSIndexPath(forRow:0,切入口:0)
- 12. 合作計劃與搶先計劃?
- 13. 我可以讓Eclipse下劃線更粗?
- 14. bootstrap3:讓導航欄鏈接下劃線
- 15. 指導與計劃
- 16. 讓其他計算機
- 17. SQL讓行計數優化
- 18. 如何讓設計與accept_nested_attributes_for在一個關係中工作?
- 19. 如何讓在IE6中設計的ASP網頁與IE8兼容?
- 20. 如何讓數學計算在0
- 21. UnboundLocalError與我的計劃
- 22. 計劃與不回0
- 23. RAII在計劃?
- 24. 如何理解這個EXPLAIN計劃..?這看起來讓我感到困惑
- 25. C#如何讓我的計劃,通過多次運行時沒有設定量
- 26. 春季計劃任務 - 讓他們每天凌晨3點運行?
- 27. 讓github與svn同步
- 28. 讓AngularJS與AWS DynamoDB合作
- 29. 讓wordpress與AJAX玩好
- 30. 如果與或條件讓
[Let and Let \ *]計劃混淆(http:// stackoverflow。com/questions/8036840 /方案混亂的讓和讓) – 2013-02-21 13:34:32
@DavidPfeffer - 似乎不是一個愚蠢的。那個人問的是嵌套'let's和'let *'的一個非常具體的相互作用,而這是一個總體概述。 – Inaimathi 2013-02-21 15:05:29
簡單地把人機解釋爲機器執行:o – Nishant 2014-01-11 10:23:18