Scala中的运行和流

  • 本文关键字:运行 Scala scala stream
  • 更新时间 :
  • 英文 :


这是我上一个问题的后续问题。
给定函数add_stream(s1:Stream[Int], s2:Stream[Int]):Stream[Int]我想编码running_sums(s:Stream[Int]):Stream[Int],它返回一个新的流:s1, s1 + s2, s1 + s2 + s3, ...

我可以想到下面的实现,但它不工作,如果s是空的

def running_sum (s:Stream[Int]):Stream[Int] =Stream.cons (s。头,add_streams (s。尾巴,running_sums (s))) 之前

我可以修复它如下:

def running_sum (s:Stream[Int]):Stream[Int] =if (s.isEmpty)为空其他Stream.cons (s。头,add_streams (s。尾巴,running_sums (s))) 之前

然而,它看起来并不优雅。

你将如何实现running_sums ?

有一个类似的库调用,叫做scanLeft

s.scanLeft(0)(_+_).tail

scanLeft呢?

scala> val sums = stream.scanLeft(List(0))((ns, n) => ns :+ (ns.last + n))
sums: scala.collection.immutable.Stream[List[Int]] = Stream(List(0), ?)
scala> sums take 5 foreach println
List(0)
List(0, 1)
List(0, 1, 3)
List(0, 1, 3, 6)
List(0, 1, 3, 6, 10)

相关内容

  • 没有找到相关文章

最新更新