gpt4 book ai didi

functional-programming - 纯函数式语言中可能产生副作用的方法

转载 作者:行者123 更新时间:2023-12-02 06:21:30 24 4
gpt4 key购买 nike

我想知道函数式语言中所有可能产生副作用的方法,即使是理论上的,但未在实践中使用。

我知道 Monads (Haskell) 和唯一性类型 (Clean)。还有其他可能吗?

最佳答案

Mercury默认情况下一切都是纯的(甚至 IO),并且不使用很少需要的功能就不可能编写不纯的代码。

Pure IO 的处理方式类似于 Clean(我相信),通过使用唯一性和世界状态参数。 Mercury 将唯一性视为模式 属性,而不是类型属性。 (此上下文中的“模式”或多或少是数据流方向)

但是 Mercury 也有静态纯度系统。一些代码被编译器识别为不纯(调用外语接口(interface),或已知的不纯函数/谓词,访问可变变量,以及其他一些情况)。此类代码必须显式声明为不纯,否则就是编译器错误。由于编译器知道不纯,因此它不会执行可能影响不纯代码的重新排序或其他优化。如果在某种程度上你可以为非纯操作提供一个纯接口(interface),你可以向编译器保证函数/谓词实际上是纯的。否则,所需的杂质声明会一直传播到 main 谓词;如果您准备好这样做,您基本上可以在 Mercury 中进行命令式编程(尽管它不会很有趣)。

Mercury 还有一个半纯 代码的概念。这是对任何其他半纯或不纯代码的操作没有副作用的代码(根据定义,纯代码不受任何其他代码的副作用影响),但可能受到来自其他不纯代码。这种额外级别的信息意味着,仅因为它们“看到”副作用但自身没有任何副作用而并非纯粹的调用仍然可以由编译器更自由地进行优化;如果不需要它们的结果,它们可以被优化掉,并且它们可以被重新排序,只要它们没有移动到一个 impure 调用上。

关于functional-programming - 纯函数式语言中可能产生副作用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8666618/

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