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. 如何在let语句中使用if语句?
- 5. 如何理解'for'语句中的'let'?
- 6. 在UIView的let语句中引用self.frame
- 7. 定义操作的let语句(绑定)
- 8. Scheme编程语言
- 9. 有没有办法在内联方法中使用let语句?
- 10. “没有规矩预期令牌”中写'let`语句时,宏
- 11. 'let`里面的语句for`循环不会同时运行
- 12. 您是否曾经使用if let语句中指定的值
- 13. Scheme(DrRacket) - cond语句不适用于递归
- 14. Scheme - 在begin语句结束时递归参数?
- 15. 如何在Scheme中使用多个语句循环?
- 16. Scheme语法:*在列表中?
- 17. `让`在Scheme中工作?
- 18. 警告8:let语句中的模式匹配警告不完整
- 19. 崩溃在哪里应该不会在Swift中崩溃(“if,let,where”语句)
- 20. 如何在Xcode 8.3的'if let'语句中修复类型转换的警告?
- 21. OS X Scheme语言(lisp的方言)
- 22. let cond
- 23. Scheme或Common Lisp?
- 24. URL scheme“prefs:root = PASS”iOS10
- 25. 方案:何时使用let,let *和letrec?
- 26. Where语句ORDER BY语句
- 27. Switch语句VS If语句
- 28. SQL语句选择语句
- 29. Scheme while while循环
- 30. Elisp:bounds in let
甲函数式编程语言鼓励并提供功能,但不一定强制执行功能性编程。 – ThePiercingPrince 2014-02-25 14:39:27