纯函数式语言中的全局变量

时间:2013-12-24 05:59:46

标签: functional-programming programming-languages

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

我想不是,因为价值语义但是我不确定并且想要 知道其他人的想法。

2 个答案:

答案 0 :(得分:5)

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

f x y = x + y

xy是在f应用于它们时受约束的变量。一旦绑定,它们永远不会在该调用的范围内发生变化,它们在某些时候就会超出范围。其他调用会将xy绑定到不同的值。这就是功能变量“变化”的意义,它与变量的原始数学意义更接近(有些人可能会说相同)。

那么,对于你的问题:全局变量是否毁了纯度?不,因为全局变量,因为它们永远不会超出范围,所以实际上是常量

答案 1 :(得分:1)

只要读取/写入它们发生在允许副作用的范围内,可变变量就不会破坏参照透明度。例如,在Haskell中,最基本类型的可变变量是IORef。传递IORef不会破坏参照透明度。只有IORef monad才允许阅读或写IO