【问题标题】:Add streams in Scala在 Scala 中添加流
【发布时间】:2011-12-12 17:28:08
【问题描述】:

我看到至少两种不同的实现:

def add_streams(s1:Stream[Int], s2:Stream[Int]): Stream[Int] =
  Stream.cons(s1.head + s2.head, add_stream(s1.tail, s2.tail))
def add_streams(s1:Stream[Int], s2:Stream[Int]) =
  (s1 zip s2) map {case (x,y) => x + y}

我猜最后一个效率更高,因为它不是递归的。
这是对的吗?你将如何编写这样的函数?

【问题讨论】:

    标签: scala stream


    【解决方案1】:

    第一个版本已损坏,因为它不检查 Stream 的结尾。 (流不需要具有不同的长度才能发生这种情况。)鉴于此,zip 版本是首选。

    【讨论】:

      【解决方案2】:

      首先:当任何一个流是有限的时,您的实现会有不同的行为。第一个会因NoSuchElementException 而崩溃,而第二个只会截断较长的流。

      无论如何,我发现后者更具表现力和优雅,尽管我怀疑在大多数情况下性能差异会很明显。

      【讨论】:

        猜你喜欢
        • 2019-05-28
        • 2012-06-14
        • 2018-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多