gpt4 book ai didi

scala - 副作用是纯函数中找不到的一切吗?

转载 作者:行者123 更新时间:2023-12-03 09:36:01 25 4
gpt4 key购买 nike

可以肯定地说以下二分法成立:

每个给定的函数是

  • 要么纯
  • 或有副作用

  • 如果是这样,(函数的)副作用是在纯函数中找不到的任何东西。

    最佳答案

    这在很大程度上取决于您选择的定义。可以肯定地说,函数是纯的还是不纯的。纯函数总是返回相同的结果,并且不会修改环境。一个不纯的函数在重复执行时会返回不同的结果(这可能是对环境做某事引起的)。

    所有杂质都是副作用吗?我不会这么说——一个函数可以依赖于它执行的环境中的某些东西。这可能是读取一些配置、GPS 位置或从互联网读取数据。这些并不是真正的“副作用”,因为它对世界没有任何作用。

    我认为有两种不同的杂质:

  • 输出杂质是当一个函数对世界做某事的时候。在 Haskell 中,这是使用 monad 建模的——一个不纯的函数 a -> b实际上是一个函数a -> M b在哪里 M捕捉它对世界所做的其他事情。
  • 输入杂质是当一个函数需要环境中的某些东西时。不纯函数a -> b可以建模为函数C a -> b其中类型C从函数可能访问的环境中捕获其他事物。

  • 单子(monad)和输出杂质当然更广为人知,但我认为输入杂质同样重要。我写了 my PhD thesis about input impurities我称之为协同效应,所以我这可能是一个有偏见的答案。

    关于scala - 副作用是纯函数中找不到的一切吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36969344/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com