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

  • 时间:
  • 浏览:0
  • 来源:幸运飞艇APP下载_幸运飞艇APP官网

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

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

既然Monoid trait是个抽象类型,没办法 人们人们 可不前要试着创建十几个 基础类型的Monoid实例:

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

2、二元函数参数中因此有另有一个 是恒等值时操作结果为原来参数:op(identity,v) = v

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

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

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

1、另有一个 抽象类型A

Monoid由以下条件组成:

人们人们 用scala的特质(trait)描述了Monoid。它却说另有一个 抽象的数据类型。

    Monoid是数学范畴理论(category theory)中的另有一个 特殊范畴(category)。不过我并没办法 打算花时间从范畴理论的深层去介绍Monoid,却说希望从另有一个 多多tcp连接 员的深层去分析Monoid以及它在泛函编程里的作用。从這個思路出发人们人们 很自然得出Monoid却说一种数据类型,因此是一种在泛函编程过程中老要会遇到的数据类型:当人们人们 针对List因此loop进行另有一个 数值的积累操作时人们人们 就会使用到Monoid。实际上Monoid却说List[A] => A的抽象模型。好了,人们人们 就不会越描越黑了吧,还是看看Monoid的定义吧:

下面人们人们 再试着增加十几个 Monoid实例:

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

因此Monoid是另有一个 数学类型,它的二元操作函数前要遵循其他定律:

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

人们人们 可不前要用编程语言来描述Monoid: