如果允许全局变量,纯函数式语言是否会失去其纯度? 我的意思是全局变量会影响语言的引用透明度吗?
我想不是,因为价值语义但是我不确定并且想要 知道其他人的想法。
答案 0 :(得分:5)
在纯函数式语言中,“变量”意味着与命令式语言中通常意义不同的东西。它在可以在给定范围内重新分配的意义上是不变的,而是在每次进入范围时,它可能具有不同的值。但是对于该范围的生命周期,它保持不变。例如,在函数
中f x y = x + y
x
和y
是在f
应用于它们时受约束的变量。一旦绑定,它们永远不会在该调用的范围内发生变化,它们在某些时候就会超出范围。其他调用会将x
和y
绑定到不同的值。这就是功能变量“变化”的意义,它与变量的原始数学意义更接近(有些人可能会说相同)。
那么,对于你的问题:全局变量是否毁了纯度?不,因为全局变量,因为它们永远不会超出范围,所以实际上是常量。
答案 1 :(得分:1)
只要读取/写入它们发生在允许副作用的范围内,可变变量就不会破坏参照透明度。例如,在Haskell中,最基本类型的可变变量是IORef
。传递IORef
不会破坏参照透明度。只有IORef
monad才允许阅读或写IO
。