0

在命令式编程中,使用语句,您可以执行以下操作:

a = 10
b = a * 2
print a # 20

我一直在想,表达式中的等价物应该是这样的:

print with(a=10){with(b=a*2){return b}}

这是用屠宰的python编写的,但这没关系,它应该说明我的意思。它不会更改程序中变量的状态(然后永远保持更改),而是在块范围内更改该范围内的任何表达式。

这种东西可能有一个名字。我不知道任何纯函数式语言,但我想这种事情对于在不存在赋值语句时计算临时值非常有用。有谁知道它叫什么,内置了哪些语言,以及在哪里可以找到有关它的更多信息?

4

1 回答 1

2

好吧,有 let-bindings:

let a = 10 in
let b = a * 2 in
b

这些存在于大多数函数式语言中,尽管有时具有不同的语法(我所知道的最明显的异常是 lisp,它使用(let ((a 10)) (let ((b (* a 2))) b));对分配的表达式可以引用的内容也有不同的限制)letreclet*还可以在单​​个let.

请注意,正式地,它不会在短时间内更改变量,而是引入了一个新的范围,带有新的变量。

于 2011-09-24T15:19:59.890 回答