34、函数式编程中的 Applicative 与 Traversable 函子深度解析

函数式编程中的 Applicative 与 Traversable 函子深度解析

1. Traverse 的应用
1.1 组合可遍历结构

遍历操作的本质要求保留其参数的结构形状,这既是其优势也是劣势。当我们尝试将两个结构组合成一个时,这点体现得尤为明显。

给定 Traverse[F] ,我们能否将 F[A] 类型的值和 F[B] 类型的值组合成 F[C] 类型的值呢?我们可以尝试使用 mapAccum 来编写一个通用的 zip 函数:

extension [A](fa: F[A])
  def zip[B](fb: F[B]): F[(A, B)] =
    fa.mapAccum(fb.toList):
      case (a, Nil) => sys.error("zip: Incompatible shapes.")
      case (a, b :: bs) => ((a, b), bs)
    .apply(0)

这个版本的 zip 函数无法处理不同形状的参数。例如,如果 F List ,它就无法处理不同长度的列表。在这个实现中,列表 fb 的长度必须至少和 fa 一样。如果 F </

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值