在Scala中添加流

时间:2011-12-12 17:28:08

标签: scala stream

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

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}

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

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