在使用Scala中的Functional Programming实现了FlatMap的map2时,我很难在第6.9节中分析评估。
所以map2看起来像
def map2[A,B,C](ra: Rand[A], rb: Rand[B])(f: (A, B) => C): Rand[C] = {
rng => {
val (a, r1) = ra(rng)
val (b, r2) = rb(r1)
(f(a, b), r2)
}
}
和flatMap看起来像:
def flatMap[A, B](f: Rand[A])(g: A => Rand[B]): Rand[B] = rng => {
val (a, r1) = f(rng)
g(a)(r1)
}
我把头撞到了墙上几天,无法弄清楚如何用flatmap做地图(地图,奇怪的是,马上来到我身边)。
从解决方案回购中查看flatMap的解决方案:
def _map2[A,B,C](s1: Rand[A], s2: Rand[B])(f: (A, B) => C): Rand[C] = {
flatMap(s1)(a => flatMap(s2)(b => unit(f(a,b))))
}
但我对此功能在评估方面的扩展感到困惑 - 我似乎无法手工写出评估结果。我不知道我的第二个f:(A,B)=> C返回到外部flatMap。
我想这是本帖之后的下一个问题:Implementation of flatMap() for State transition!