我正在了解Haskell中的IO和功能方面的副作用。我知道外部效果是在函数外部可以观察到的效果,而内部效果从外部看不到。我的理解是,外部影响会改变功能范围之外的“现实世界”。
全局变量访问是外部影响,因为它们在函数外部可见。但是,是否将修改局部变量视为内部影响?我相信,由于这些局部变量只能在函数内部访问,因此对其进行更改不会影响“现实世界”,因此不会将其视为内部影响。
但是,我不确定我的推理是否正确。任何见解都会受到赞赏。
答案 0 :(得分:2)
尝试运行此程序:
x = 5
x = 7
它将显示:
Multiple declarations of ‘x’
Declared at: main.hs:1:1
main.hs:2:1
|
2 | x = 7
这意味着,haskell中的variables
具有与其他语言不同的含义和概念,并且显然具有行为。您绑定值,即等式右侧的值(因为=
是要声明等式,它与其他语言中的=
的作用不同,例如在内存中分配值和给内存指针,以便您可以更改它或对其进行访问)绑定到左侧的值。而且Haskell中的值是纯值,x
在程序的所有执行中都具有完全相同的值,永远不会改变。
全局变量访问是外部影响,
是的,x
是全局的,但这是范围的问题,我可以这样做:
x = 5
f = \x -> 6 + x
然后
&> x
&> 5
&> y 4
$> 10
在这一点上不要混淆