当前位置:  开发笔记 > 编程语言 > 正文

是延续单子吗?

如何解决《是延续单子吗?》经验,为你挑选了3个好方法。

可以说延续是monad吗?它们是monad的子集还是仅仅是实现monad的一种方式?

编辑:或者也许我弄错了,monads是一个比延续更抽象的概念?(所以我真的把苹果与橘子比较)



1> Norman Ramse..:

不仅是延续monad,而且它们是一种通用monad,在某种意义上,如果你有continuation和state,你可以模拟任何功能monad.这个令人印象深刻但技术性很强的结果来自Andrzej Filinski令人印象深刻且技术性很强的思想,他在1994年或之后写过:

我们证明,任何单元和扩展操作都可以表达为纯函数术语的monad可以嵌入到具有"可组合延续"的按值调用语言中.


@profjim:实际上,Filinski还展示了如何使用普通的continuation和state来实现分隔的continuation.他使用callcc在SML/NJ中实现了整个过程.

2> Brian..:

简而言之,由于monad的"绑定"采用有效的延续("计算的其余部分"的lambda)作为参数,monad在这个意义上是连续的.另一方面,继续传递风格可以使用monadic语法糖在非CPS语言中有效实现,如下面的许多misc链接所示.

来自Haskell的'all about monads'教程:

https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monad

一个F#continuation monad,用于为for-style-loops实现'break'和'continue'

http://cs.hubfs.net/forums/thread/9311.aspx

以及在F#中对问题应用continuation monad的示例:

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!256.entry



3> John Feminel..:

他们可以,虽然他们不需要.我会稍微改回你的问题,然后说monad是实现延续的一种方式.但你可以在很多方面实现延续-你可以做CPS的在C#中的温和但受限传真没有太多的精力,例如.看看来自Haskell网站的Continuation Monad,进行非常彻底的处理.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有