我看到至少两种不同的实现:
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}
我猜最后一个更有效率,因为它不是递归的 这是对的吗?你会如何编写这样的函数?
答案 0 :(得分:5)
第一个版本已损坏,因为它未检查Stream
的结尾。 (为此,流不需要具有不同的长度。)鉴于此,zip
版本是首选版本。
答案 1 :(得分:2)
首先:当任一流都是有限的时,您的实现会有不同的行为。第一个将以NoSuchElementException
崩溃,而第二个将截断较长的流。
我发现后者更具表现力和优雅,但我怀疑在大多数情况下性能差异会很明显。