python haskell 使用对比_Python的地图和Haskell的fmap有什么区别?

Python的map和Haskell的fmap虽然在某些方面相似,但本质上不同。fmap是Haskell中的泛函,能作用于更广泛的数据结构,而不仅仅是列表,如Maybe、函数和解析器。Python的map更强大,可变且能作用于多种类型,包括字典和集合,但没有Haskell的泛函抽象。总的来说,Haskell的fmap关注通用性和类型约束,而Python的map强调灵活性和实用性。
摘要由CSDN通过智能技术生成

他们是完全不同的.

这两个函数在类似列表的事情上做了非常类似的事情,但这确实是相似之处的结束.将Haskell的地图与Python的地图进行比较可能更有用,但是fmap更加通用,意义也不同.

在Haskell中,fmap是一种“提升”或“穿孔”操作.它需要一个函数来自 – > b并将其“提升”到f a – >的函数. f b.类似列表的容器是一种可以“穿孔”的东西,但是比列表更多的东西是仿函数!

对Maybe a进行映射是非常有用和常见的,尽管有人可能会认为Maybe就像一个零或一个元素的列表.但是,请考虑函数是Haskell中的函子.你可以在函数上映射并接收一个新函数,但函数显然不是迭代的.类似地,解析器组合库(如parsec)中的解析器是仿函数,您可以通过对其进行fmapping来生成新的解析器,以将函数应用于其结果.

各种各样的东西都是仿函数,其中很多都与容纳价值的容器关系不大.所有monad都是仿函数,包括Writer,State和Cont之类的东西,它们都是有效的计算,而不是类似列表的东西.其他的东西也是仿函数,比如Const,它可以与Lift结合形成一个单独收集错误的应用函子.

每个事物所做和所做的具体细节超出了这个问题的范围,但重点是Haskell的一个仿函数概念比一个“可迭代的东西”更为普遍,而且它通常以不同的方式使用Python的地图.

然而,从另一个角度来看,可以说Python的地图比Haskell的fmap更强大.普遍性需要成本,这需要简单.具体而言,您可以选择做更多的事情!这与Python与Haskell的其他差异(如动态类型和可变函数)相比,使得Python的映射可以执行Haskell的fmap无法做到的事情.

正如Daniel Sanchez指出的那样,Python的地图是可变的,所以当提供多个迭代时,它就像Haskell中的zipWith一样:

>>> map(lambda x,y: x+y, range(10), range(10))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值