Angenommen, ich habe
val foo : Seq[Double] = ...
val bar : Seq[Double] = ...
und ich möchte eine Sequenz erzeugen, bei der baz(i) = foo(i) + bar(i) ist. Eine Möglichkeit, die mir dazu einfällt, ist
val baz : Seq[Double] = (foo.toList zip bar.toList) map ((f: Double, b : Double) => f+b)
Dies fühlt sich jedoch sowohl hässlich und ineffizient - ich habe zu konvertieren beide seqs zu Listen (die mit Lazy-Listen explodiert), erstellen Sie diese temporäre Liste von Tupeln, nur um es zuzuordnen und lassen Sie es GCed werden. Vielleicht lösen Streams das lazy-Problem, aber auf jeden Fall fühlt sich das unnötig hässlich an. In Lisp würde die map-Funktion über mehrere Sequenzen abbilden. Ich würde schreiben
(mapcar (lambda (f b) (+ f b)) foo bar)
Und es würden nirgendwo temporäre Listen erstellt werden. Gibt es eine map-over-multiple-Listen-Funktion in Scala, oder ist zip kombiniert mit Destrukturierung wirklich der "richtige" Weg, dies zu tun?