加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – “世界”在功能编程世界中意味着什么?

发布时间:2020-12-16 09:48:09 所属栏目:安全 来源:网络整理
导读:我一直在潜水进行功能编程超过3年,我一直在阅读和理解许多文章和方面的功能编程。 但我经常偶然发现许多关于“世界”的副作用计算,以及携带和复制“世界”的IO monad样本。 “世界”在这种情况下是什么意思?这是在所有副作用计算上下文中是相同的“世界”
我一直在潜水进行功能编程超过3年,我一直在阅读和理解许多文章和方面的功能编程。

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

还有关于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

这需要当前的世界,并在功能上产生一个“新的”,文件修改,然后你可以传递到连续调用。世界本身只是一个抽象类型,没有办法直接偷看它,除非通过相应的功能,如阅读。

现在,上面的接口有一个问题:没有进一步的限制,它会允许程序“复制”世界。例如:

w1 = write w "file" "yes"
w2 = write w "file" "no"

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读