首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延续是monads吗?

延续是monads吗?
EN

Stack Overflow用户
提问于 2009-03-20 13:24:45
回答 2查看 4.5K关注 0票数 17

continuations可以说是monads吗?它们是monads的一个子集,还是仅仅是实现monads的一种方式?

编辑:也许我搞错了,monads是一个比continuations更抽象的概念?(所以我在这里实际上是在比较苹果和橙子)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-20 13:29:20

简而言之,由于monad的“绑定”需要一个有效的延续(“计算的其余部分”的lambda )作为参数,因此monad在这个意义上就是延续。另一方面,可以使用一元语法糖在非CPS语言中有效地实现延续传递样式,如下面的一些misc链接所示。

来自Haskell的“all about monads”教程:

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

一个F#延续单体,用于为for样式循环实现'break‘和'continue’

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

以及在F#中对问题应用连续单数的示例:

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

票数 18
EN

Stack Overflow用户

发布于 2010-08-05 16:17:56

延续是程序中的一个特定函数。单体是类型构造函数。

接受类型T的延续的类型构造函数Cont<T>将不是monad。

然而,Cont<Cont<T>>是一个monad,这就是通常所说的“延续monad”。

(在一种语言中使用callcc等同于能够从Cont<Cont<T>>转换为T。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/666121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档