代码之家  ›  专栏  ›  技术社区  ›  troelskn

延续是单子吗?

  •  16
  • troelskn  · 技术社区  · 15 年前

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

    编辑: 或者我弄错了 单子 是一个比 连续性 ?(所以我真的把苹果比作橙子)

    5 回复  |  直到 10 年前
        1
  •  17
  •   pasja hobbs    10 年前

    简单地说,由于monad的“bind”采用有效的延续(剩余计算的lambda)作为参数,因此monad在这个意义上就是延续。另一方面,正如下面的一些misc链接所建议的那样,可以使用单语法sugars在非CPS语言中有效地实现连续传递样式。

    从Haskell的“关于Monads的一切”教程:

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

    F continue monad,用于实现样式循环的“break”和“continue”

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

    对f中的问题应用连续monad的示例:

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

        2
  •  23
  •   Norman Ramsey    15 年前

    不仅是延续单子,而且它们是一种通用的单子,从某种意义上说,如果您有延续和状态,您可以模拟任何功能单子。这一令人印象深刻但高度技术性的成果来自于 Andrzej Filinski ,他在1994年写的关于:

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

        3
  •  6
  •   pasja hobbs    10 年前

    他们可以,尽管他们不需要。我会稍微颠倒一下您的问题,说monad是实现延续的一种方法。但是,您可以通过许多方式实现连续性——您可以在C中进行适度但受限的CPS复制,而不需要太多的努力, for example . 看一看 The Continuation Monad 从哈斯克尔的现场进行了非常彻底的治疗。

        4
  •  4
  •   sdcvvc    15 年前

    关于这个主题的一篇非常好的文章: http://blog.sigfpe.com/2008/12/mother-of-all-monads.html

        5
  •  1
  •   RD1    14 年前

    延续是程序中的一个特殊函数。monad是类型构造函数。

    类型构造函数 Cont<T> 对于采用类型的延续 T 不会是单子。

    然而, Cont<Cont<T>> 是单子,这就是通常所说的“连续单子”。

    (在语言中使用callcc等同于能够从 继续<继续<t> T )

    推荐文章