【函数式】Monads模式初探——Monoids

本文探讨了Monads的基础概念,重点介绍了Monoids,一种满足结合律和存在单位元的元素集合。Monoids在整数、列表、字符串等多种数据类型中都有体现。文章详细阐述了Monoids的条件和定律,通过实例展示了如何在编程中应用Monoids,特别是与List的fold操作的关联。结合性使得Monoids在并行化计算中发挥作用,但并非所有集合都能轻易应用Monoids模式。文章最后提及Monoids与范畴论的联系,以及Monoids在函数式编程中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Monads是什么

知乎里有关于什么是Monad的问题讨论,而在维基百科中也有关于Monad的释义。作为初次接触到Monads概念,难免会有些晕头转向,也难免会有些畏惧(因为Monads和数学中的范畴论有密切关系),但是Monads又是如此的重要,因为它在函数式编程中实在是应用太广泛了,并且在Scala的标准库中又常常遇到,使得我们不得不好好研究一番。

Monoids

Monoids是一种元素的集合,它需要满足结合律和幺元(Identity,也称为单位元,这种元和其他元素结合时,不会改变那么元素)这些约束条件。
比如:

  • 整数类型Int,其中0是Identity,其中的任何整数满足结合律
  • 列表类型List,任何两个列表可以通过:::连接起来,其中Nil或空列表[]是Identity
  • 字符串类型String,两个字符串可以拼接,其中空字符串或”“是Identity

Monoids在平常的编程之中无处不在,当用到一个列表,连接字符串,通过一个循环得到一个累加结果,都在使用到Monoids。

条件和定律

  1. 一个抽象类型A
  2. 一个二元结合性函数(binary associative function),对传入的两个A类参数进行操作后产生一个A类型结果。op操作必须是结合性的,即op(x, y) == op(y, x);op(a,op(b,c)) = op(op(a,b),c):这个定律是函数组合(function com
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值