Scala - 状态动作 - Scala中的FP练习第6章 - FlatMap的评估

时间:2017-08-29 00:38:34

标签: scala functional-programming

在使用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

0 个答案:

没有答案