Functional programming 纯函数语言中的全局变量

Functional programming 纯函数语言中的全局变量,functional-programming,programming-languages,Functional Programming,Programming Languages,如果允许使用全局变量,纯函数语言是否会失去其纯度? 我的意思是,全局变量是否会影响语言的引用透明度 我想不会,因为值语义,但我不确定,我想 了解别人的想法。在纯函数式语言中,“变量”的含义与命令式语言中通常的含义不同。它不是可变的,因为它可以在给定的范围内重新分配,而是因为每次进入范围时,它可能具有不同的值。但在该范围的生命周期内,它保持不变。例如,在函数中 f x y = x + y x和y是变量,当应用f时,这些变量将被绑定。一旦绑定,它们就永远不会在调用的范围内更改,它们只是在某个点超出

如果允许使用全局变量,纯函数语言是否会失去其纯度? 我的意思是,全局变量是否会影响语言的引用透明度

我想不会,因为值语义,但我不确定,我想
了解别人的想法。

在纯函数式语言中,“变量”的含义与命令式语言中通常的含义不同。它不是可变的,因为它可以在给定的范围内重新分配,而是因为每次进入范围时,它可能具有不同的值。但在该范围的生命周期内,它保持不变。例如,在函数中

f x y = x + y
x
y
是变量,当应用
f
时,这些变量将被绑定。一旦绑定,它们就永远不会在调用的范围内更改,它们只是在某个点超出范围。其他调用将
x
y
绑定到不同的值。这就是函数变量“变化”的意义,它更接近(有些人可能会说完全相同)变量的原始数学意义


那么,对于你的问题:全局变量会破坏纯度吗?不,因为全局变量永远不会超出作用域,所以它们实际上是常量。

可变变量不会破坏引用透明性,只要读/写它们发生在允许副作用的作用域中。例如,在Haskell中,最基本的可变变量类型是。传递
IORef
不会破坏引用透明度。阅读或书写
IORef
s只能在
IO
monad中进行。

这个问题似乎是离题的,因为它是关于计算机科学,而不是实用编程。试试cs.stackexchange.com。谢谢Barmar。我不知道那个页面。在函数式语言中,您可以传递函数,因此+在Haskell中可以被视为全局变量。谢谢,这很有意义!