6
A
回答
11
聲明「Scheme是一種函數式編程語言」是不正確的。在Scheme中,函數式編程風格受到鼓勵,但不是強迫的。事實上,你可以使用set!
(賦值語句!)修改任何變量的值:
(define x 10)
(set! x (+ x 3))
x
=> 13
就問題的let
聲明,記得表達這個功能,比如一個:
(let ((x 10))
(+ x 3))
=> 13
...它只是語法糖,和引擎蓋下它的實現是這樣的:
((lambda (x)
(+ x 3))
10)
=> 13
注意到一個let
在其變量執行一次性single assignments,所以它不違反任何純功能編程原理本身,以下可以肯定一個let
表達的:
表達式的評估不具有的副作用,如果它不改變機器的可觀察到的狀態,併爲同一輸入
還生產相同的值,維基百科引用:
不純粹的功能語言既提供了單一的分配,也提供了真正的分配(儘管真正的分配通常使用頻率比命令式編程語言少)。例如,在方案,單分配(帶
let
)和真分配(帶set!
)可以在所有變量被使用,並且提供了用於內部列表,載體,字符串破壞性更新專門的基元等
1
http://en.wikipedia.org/wiki/Assignment_(computer_science)#Single_assignment
基本上,它是一個單一的分配這是允許的。其他任務由於副作用而不是「允許」的。
編輯:允許在引用中,因爲,正如奧斯卡所說,它不是強制性的,但建議。
相關問題
- 1. Scheme - if語句的語法
- 2. Swift:分解「case let ...」語句
- 3. Return語句VS GUARD LET
- 4. 在UIView的let語句中引用self.frame
- 5. 定義操作的let語句(綁定)
- 6. SAS let語句:引用單元值?
- 7. eval返回一個let語句
- 8. 如何理解'for'語句中的'let'?
- 9. 如何在let語句中使用if語句?
- 10. 在Scheme中實現lambda語句?
- 11. 在東方語言選擇語句中使用let塊
- 12. Scheme編程語言
- 13. 如何使用let子句
- 14. Scheme/Racket中let的lambda定義是什麼?
- 15. Swift:如果let語句無法處理空數組
- 16. 有沒有辦法在內聯方法中使用let語句?
- 17. Haskell中let和in子句的正確語法
- 18. 在sas中的%let語句後,宏變量未初始化
- 19. 有沒有辦法迫使RSpec重新評估let語句?
- 20. Let語句內部無法辯駁的模式失敗
- 21. LINQ和試圖加入一個let語句導致
- 22. 我可以讓let語句進入F#列表理解嗎?
- 23. 'let`裏面的語句for`循環不會同時運行
- 24. 「沒有規矩預期令牌」中寫'let`語句時,宏
- 25. 您是否曾經使用if let語句中指定的值
- 26. Let子句因爲它爲什麼可以使用此連接語句
- 27. Scheme(DrRacket) - cond語句不適用於遞歸
- 28. Scheme - 在begin語句結束時遞歸參數?
- 29. 如何在Scheme中使用多個語句循環?
- 30. Scheme:不能在if語句中使用#t
甲函數式編程語言鼓勵並提供功能,但不一定強制執行功能性編程。 – ThePiercingPrince 2014-02-25 14:39:27