函数式编程关心类型(代数结构)之间的关系

Posted zzfx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式编程关心类型(代数结构)之间的关系相关的知识,希望对你有一定的参考价值。

函数式编程关心数据的映射,命令式编程关心解决问题的步骤

我想稍微改一下,使其更数学化一点。

函数式编程关心类型(代数结构)之间的关系,命令式编程关心解决问题的步骤

函数式编程中的lambda可以看成是两个类型之间的关系,一个输入类型和一个输出类型。lambda演算就是给lambda表达式一个输入类型的值,则可以得到一个输出类型的值,这是一个计算,计算过程满足 -等价和 -规约。

函数式编程的思维就是如何将这个关系组合起来,用数学的构造主义将其构造出你设计的程序。

用Haskell来说,这个关系就是运算符(->),其表示了一个lambda演算的类型,在值的层面和符号‘\‘一起构造了一个lambda表达式。空类型()、积类型(a, b)与和类型Either a b是最基本的数据类型的构造,其和curry和uncurry一起,还有米田定理、伴随函子,使得我们可以构造任意复杂的数据类型和程序。比如Functor、Applicative、Monad/Comonad、Limit/Colimit、End/Coend、Left Kan Extenstion/Right Kan extension等。

具体的程序构造例子可以看我的回答

parker liu:Haskell中的foldl和foldr的联系?

以上是关于函数式编程关心类型(代数结构)之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

函数式编程基础

函数式编程简介-附入门方法

函数式编程思想

函数式编程与面向对象编程[3]:Scala的OOP-FP混合式编程与抽象代数理论

函数式编程第一弹

Scala函数式编程