gpt4 book ai didi

scala - "world"在函数式编程世界中意味着什么?

转载 作者:行者123 更新时间:2023-12-03 10:18:57 25 4
gpt4 key购买 nike

我已经潜入函数式编程 3 年多了,并且我一直在阅读和理解函数式编程的许多文章和方面。

但我经常偶然发现许多关于副作用计算中的“世界”以及在 IO monad 样本中携带和复制“世界”的文章。在这种情况下,“世界”意味着什么?这是所有副作用计算上下文中的同一个“世界”还是仅适用于 IO 单子(monad)?

此外,有关 Haskell 的文档和其他文章也多次提到“世界”。

关于这个“世界”的一些引用:
http://channel9.msdn.com/Shows/Going+Deep/Erik-Meijer-Functional-Programming

和这个:
http://www.infoq.com/presentations/Taming-Effect-Simon-Peyton-Jones

我期待一个样本,而不仅仅是对世界概念的解释。我欢迎 Haskell、F#、Scala、Scheme 中的示例代码。

最佳答案

“世界”只是一个抽象概念,它捕捉“世界的状态”,即当前计算之外的一切状态。

以这个 I/O 函数为例:

write : Filename -> String -> ()

这是无效的,因为它会通过副作用更改文件(其内容是世界状态的一部分)。然而,如果我们将世界建模为一个显式对象,我们可以提供这个函数:
write : World -> Filename -> String -> World

这将获取当前世界并在功能上产生一个"new"世界,修改文件,然后您可以将其传递给连续调用。 World 本身只是一个抽象类型,无法直接查看,只能通过相应的函数如 read .

现在,上面的接口(interface)有一个问题:如果没有进一步的限制,它会允许程序“复制”世界。例如:
w1 = write w "file" "yes"
w2 = write w "file" "no"

你用过同一个世界 w两次,产生了两个不同的 future 世界。显然,这作为物理 I/O 的模型毫无意义。为了防止这样的例子,需要一个更花哨的类型系统来确保世界是线性处理的,即从不使用两次。 Clean 语言就是基于这个想法的一个变体。

或者,您可以封装世界,使其永远不会变得明确,从而不能通过构造来复制。这就是 I/O monad 所实现的——它可以被认为是一个状态 monad,其状态是世界,它隐含地穿过 monadic Action 。

关于scala - "world"在函数式编程世界中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13340458/

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