在Scala中添加流

在Scala中添加流,scala,stream,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]):Stream[Int]= Stream.cons(s1.head+s2.head,add_Stream(s1.tail,s2.

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

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]):Stream[Int]= Stream.cons(s1.head+s2.head,add_Stream(s1.tail,s2.tail)) def添加_流(s1:流[Int],s2:流[Int])= (s1-s2)映射{case(x,y)=>x+y} 我想最后一个更有效,因为它不是递归的。

对吗?您将如何编写这样一个函数

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


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

第一个版本被破坏,因为它没有检查
流的结尾。(流的长度不必不同,就可以发生这种情况。)考虑到这一点,首选
zip
版本

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