Haskell:了解函数的副作用

时间:2019-07-25 22:57:39

标签: haskell functional-programming

我正在了解Haskell中的IO和功能方面的副作用。我知道外部效果是在函数外部可以观察到的效果,而内部效果从外部看不到。我的理解是,外部影响会改变功能范围之外的“现实世界”。

全局变量访问是外部影响,因为它们在函数外部可见。但是,是否将修改局部变量视为内部影响?我相信,由于这些局部变量只能在函数内部访问,因此对其进行更改不会影响“现实世界”,因此不会将其视为内部影响。

但是,我不确定我的推理是否正确。任何见解都会受到赞赏。

1 个答案:

答案 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

在这一点上不要混淆