在命令式编程中,使用语句,您可以执行以下操作:
a = 10
b = a * 2
print a # 20
我一直在想,表达式中的等价物应该是这样的:
print with(a=10){with(b=a*2){return b}}
这是用诅咒的python编写的,但它应该没关系,它应该说明我的意思。不是改变程序中变量的状态(然后永远保持变化),而是在块范围内为该范围内的任何表达式更改它。
这种事情可能有一个名字。我不知道任何纯函数式语言,但我想这种事情对于在赋值语句不存在时计算临时值非常有用。有谁知道它叫什么,有什么语言内置,以及我可以在哪里找到更多相关信息?
答案 0 :(得分:2)
嗯,有let-bindings:
let a = 10 in
let b = a * 2 in
b
这些语言存在于大多数函数式语言中,尽管有时会使用不同的语法(我知道最明显的异常是lisp,它使用(let ((a 10)) (let ((b (* a 2))) b))
;还有letrec
和let*
对分配的表达式的不同限制可以参考)。还可以在单个let
中创建多个绑定。
请注意,正式地说,它不会在短时间内更改变量,而是引入一个带有新变量的新范围。