Предположим, что
val foo : Seq[Double] = ...
val bar : Seq[Double] = ...
и я хочу создать seq, где baz (i) = foo (i) + bar (i). Один из способов, который я могу придумать, - это
val baz : Seq[Double] = (foo.toList zip bar.toList) map ((f: Double, b : Double) => f+b)
Однако это кажется как уродливым, так и неэффективным - мне нужно преобразовать оба seqs в списки (которые взрываются с ленивыми списками), создайте этот временный список кортежей, только чтобы сопоставить его и позволить ему быть GCed. Может быть, потоки решают ленивую проблему, но в любом случае это кажется излишне уродливым. В lisp функция отображения отображает несколько последовательностей. Я бы написал
(mapcar (lambda (f b) (+ f b)) foo bar)
И никакие временные списки не будут созданы нигде. Есть ли функция отображения по нескольким спискам в Scala или zip в сочетании с деструктурированием действительно "правильного" способа сделать это?