Добавить потоки в Scala - PullRequest
       10

Добавить потоки в Scala

2 голосов
/ 12 декабря 2011

Я вижу по крайней мере две разные реализации:

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 ]

5 голосов
/ 12 декабря 2011

Первая версия не работает, так как она не проверяет конец Stream. (Потоки не должны быть разной длины, чтобы это произошло.) Учитывая, что предпочтительнее версия zip.

2 голосов
/ 12 декабря 2011

Прежде всего: ваши реализации ведут себя по-разному, когда любой из потоков конечен.Первый из них завершится с NoSuchElementException, а второй просто обрежет более длинный поток.

Я считаю, что последний гораздо более выразителен и элегантен, хотя я сомневаюсь, что разница в производительности будет заметна в большинстве случаев.

...