【问题标题】:Functional programming: When to use which abstraction函数式编程:何时使用哪个抽象
【发布时间】:2017-05-03 11:47:56
【问题描述】:

函数式编程中有很多模式。例如Monoids、Monads、Functors 等但这些都是非常高级的抽象,人们并不真正知道何时使用哪一个。

例如当您想将 A 的多个项目简化为 A 的单个项目时,Monoids 很有用

从这个意义上说,这些抽象试图解决什么问题? 也许我们可以展示程序员在发现monoid 之前是如何处理问题的,以及他们如何使用monoid 处理同样的问题

【问题讨论】:

    标签: functional-programming abstraction


    【解决方案1】:

    那些模式是数学概念,它们要么适用于您的程序,要么不适用。您可以在没有它们的情况下编写完全相同的代码,您会开始注意到针对不同数据类型的许多函数共享一个共同的结构。

    您不仅需要为每种数据类型使用不同的函数来处理这种常见的事情,而且还需要为每种数据类型重写所有帮助函数。这是您发现要使用抽象的时候。您检查哪个类型类与通用结构匹配并提供预期的辅助函数,然后将其应用于您的数据类型。


    关于您的具体示例:在“发现”Monoids 之前,每个人都使用++ 追加两个列表,concat 追加多个列表。同样,他们使用+ 对两个数字求和,并使用sum 对多个数字求和。如果有人写了一棵树,它的元素应该被折叠成一个值,他必须使用相应的操作为列表编写一个实现,为数字编写一个实现。
    现在,有了幺半群,我们可以抽象出具体类型,并为任意幺半群编写树实现。我们使用mappend 和mconcat 操作而不是特定的操作,我们的树适用于列表和数字。甚至任何其他幺半群。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2014-02-23
      • 2011-03-21
      • 2016-05-31
      • 2010-12-21
      相关资源
      最近更新 更多