小编Yar*_*ner的帖子

Scala 中的函数式编程练习 6.11。这种理解是如何工作的?

代码在这里:https : //github.com/fpinscala/fpinscala/blob/master/answers/src/main/scala/fpinscala/state/State.scala

  def simulateMachine(inputs: List[Input]): State[Machine, (Int, Int)] = for {
    _ <- sequence(inputs map ((modify[Machine] _) compose update))
    s <- get
  } yield (s.coins, s.candies)
Run Code Online (Sandbox Code Playgroud)

我不明白第二行在s <- get这个理解中是如何工作的。

据我所知,第一行创建了一个 State[Machine, List[Unit]] 并且 flatMap 用 _ 丢弃了 List[Unit]。

随后,在第二行中,我不明白如何get应用于Machine第一行中的创建。怎么Machine传下去?

编辑: 感谢 jwvh 和 Markus Appel 的答复,我现在知道这get是一个没有参数的方法,它返回一个State[S, S].

现在我想我明白了,但如果我错了,请纠正我。首先,我扩展了理解如下。

sequence(inputs map ((modify[Machine] _) compose update))
    .flatMap(_ => get
        .map(s => (s.coins, s.candies))
Run Code Online (Sandbox Code Playgroud)

get.map(s => (s.coins, s.candies)可以用 …

scala

5
推荐指数
1
解决办法
188
查看次数

解释flatMap关联性

我正在阅读,Functional Programming in Scala并且有书评论说,monad的flatMap必须遵循以下关联性法则。

x.flatMap(f).flatMap(g) == x.flatMap(a => f(a).flatMap(g))

我通常以关联性来表示类似(a+(b+c))==的意思,((a+b)+c)但是我无法将此处的方程式转换成类似的意思。

双方似乎等同于我。假设x是类型M[A],它们似乎都首先应用fa随后flatMap(g)的结果f(a)

这部法律的意义是什么?

functional-programming scala

1
推荐指数
1
解决办法
49
查看次数

标签 统计

scala ×2

functional-programming ×1