代码之家  ›  专栏  ›  技术社区  ›  Kevin Won

在C语言中使用单子最引人注目的场景是什么#

  •  21
  • Kevin Won  · 技术社区  · 17 年前

    让我先声明一下,我对单子的理解还很幼稚。我在这里阅读了有关单子的各种线索,并对这个概念做了几个小时的研究。我对这个词感到很不舒服,但我认为可以肯定地说我 通常地 了解单子是什么/做什么。

    有人见过这样的野兽吗?

    8 回复  |  直到 17 年前
        1
  •  11
  •   Brian    17 年前

    这里有一个这样的场景:您想要编写一个解析库(嵌入式DSL的一个很好的示例),您会发现最好的是一元解析器组合库。因此,您可以利用LINQ语法糖编写与正在解析的语言的语法具有相同结构的C#代码,并且您可以从一个非常棒的编程模型中获得即时语义分析和错误恢复的好处。看见 this blog 请描述一下。

        2
  •  5
  •   Greg Bacon    16 年前

    查找毕达哥拉斯三元组:

      var r = from a in Enumerable.Range(1, 25)
              from b in Enumerable.Range(a, 25-a)
              from c in Enumerable.Range(b, 25-b)
              where a*a + b*b == c*c
              select new [] { a, b, c };
    
        3
  •  4
  •   Brian    17 年前

    这里有一个这样的场景:您希望编写代码,在不保留线程的情况下进行顺序异步调用(例如IO),但不希望编写异步编程模型(BeginFoo/EndFoo)强迫您陷入的毫无希望的混乱局面。因此,您可以使用monad和linqsugars编写看起来是直线的代码,但它会在整个过程中释放/切换线程。看见 this blog 为了简短的描述。

        5
  •  3
  •   Dmitri Nesteruk    15 年前

    一个例子是简化 null 如中所示,使用Maybe monad进行检查 this article .

        6
  •  0
  •   Community Mohan Dere    9 年前

    LINQ用于StackOverflow上的许多解决方案(通常在问题中要求)。使用 LINQ 标记,您将看到真实世界的用法。

        7
  •  0
  •   Greg Bacon    17 年前

    使用monad编程是声明性的,它在高层描述您想要什么,而不是如何生成它的底层细节。

    见 exercises at the end 属于 Brian Beckman's state-monad talk on Channel 9 .

        8
  •  0
  •   Mauricio Scheffer    15 年前

    I recently blogged NuGet 也许是单子 ).我尽了最大努力,一步一步地做,解释了这一步背后的理性,所以我认为这有助于理解单子是如何有用的。