泛函编程(21)-泛函数据类型-Monoid

  • 时间:
  • 浏览:0
  • 来源:UU快3—全天最准大发快三

1、一有4个抽象类型A

下面我们都都 儿再试着增加十几个 Monoid实例:

1、结合性(associativity):op(a,op(b,c)) = op(op(a,b),c):什儿 定律是函数组合(function composition)不可缺的条件

我们都都 儿可不能能用编程语言来描述Monoid:

2、一有4个二元结合性函数(binary associative function),对传入的一有4个A类参数进行操作后产生一有4个A类型结果

3、一有4个恒等值(identity)

Monoid由以下条件组成:

左右折叠算法都可不能能。Monoid的结合性定律(associativity law)可不能能使List元素运算左右路径相等。

还是回到对List[A]的累加操作。下面什儿 函数用Monoid对List[A]元素A进行累加操作:

2、二元函数参数中之后有一有4个是恒等值时操作结果为可是我 参数:op(identity,v) = v

既然Monoid trait是个抽象类型,越来越我们都都 儿可不能能试着创建十几个 基础类型的Monoid实例:

foldLeft是从左边刚刚刚刚刚刚刚开始 折叠,只非要采用endoComposeMonoid的镜像Monoid把op参数位置调换就行了:

我们都都 儿用scala的特质(trait)描述了Monoid。它可是我 一有4个抽象的数据类型。

    Monoid是数学范畴理论(category theory)中的一有4个特殊范畴(category)。不过我并越来越打算花时间从范畴理论的强度去介绍Monoid,可是我 希望从一有4个守护tcp连接员的强度去分析Monoid以及它在泛函编程里的作用。从什儿 思路出发我们都都 儿很自然得出Monoid可是我 两种 数据类型,之后是两种 在泛函编程过程中老是会遇到的数据类型:当我们都都 儿针对List之后loop进行一有4个数值的积累操作时我们都都 儿就会使用到Monoid。实际上Monoid可是我 List[A] => A的抽象模型。好了,我们都都 儿就并不越描越黑了吧,还是看看Monoid的定义吧:

之后Monoid是一有4个数学类型,它的二元操作函数非要遵循什儿 定律:

以上十几个 增加的Monoid实例中endoComposeMonoid和endoAndThenMonoid之后比较陌生。它们是针对函数组合的Monoid。

说明:foldMap非要f: A => B, foldRight有 (A,B) => B >>> A => B => B >>> f(a)(b) => b >>> f(a,b)(z) >>> f(b)(b)