在函数式编程语言scheme中,没有赋值语句。
但在一个let
陈述
(let ((x 2))
(+ x 3))
您正在分配2
to x
,那么为什么这不违反函数式编程中没有赋值语句的原则呢?
“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
执行一次单一作业 https://en.wikipedia.org/wiki/Assignment_%28computer_science%29#Single_assignment其变量,因此它不违反任何纯函数式编程原则per se,可以肯定如下let
表达:
如果表达式的计算不改变机器的可观察状态,并且为相同的输入生成相同的值,则它不会产生副作用
另外,引用维基百科:
非纯函数语言提供单一赋值和真实赋值(尽管真实赋值的使用频率通常低于命令式编程语言)。例如,在Scheme中,两个单一赋值(与let
)和真实的分配(与set!
) 可用于所有变量,并提供专门的原语用于列表、向量、字符串等内部的破坏性更新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)