函数式编程:何时使用哪个抽象

时间:2017-05-03 11:47:57

标签: functional-programming abstraction

功能编程中有很多模式。例如Monoids,Monads,Functors e.t.c但这些都是非常高级的抽象,并且我们真的不知道何时使用哪一个。

e.g。当你想将A的几个项目减少到A

的单个项目时,Monoids非常有用

从这个意义上讲,这些抽象试图解决的问题是什么? 也许我们可以通过使用monoid

来展示程序员在monoid被发现之前如何处理问题以及他们如何处理同一问题

1 个答案:

答案 0 :(得分:3)

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

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

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