私が持っているとしましょう
val foo : Seq[Double] = ...
val bar : Seq[Double] = ...
そして、baz(i) = foo(i) + bar(i) の seq を生成したいと考えています。これを行うために私が考えることができる1つの方法は
val baz : Seq[Double] = (foo.toList zip bar.toList) map ((f: Double, b : Double) => f+b)
ただし、これは見苦しく非効率的です。両方の seq をリストに変換し (これは遅延リストで爆発します)、タプルのこの一時リストを作成し、それをマップして GC するだけです。ストリームが怠惰な問題を解決するかもしれませんが、いずれにせよ、これは不必要に醜いように感じます。Lisp では、 map 関数は複数のシーケンスにマップされます。私は書くだろう
(mapcar (lambda (f b) (+ f b)) foo bar)
また、一時リストはどこにも作成されません。Scalaにはmap-over-multiple-lists関数がありますか、それともzipとdestructuringを組み合わせることは本当にこれを行うための「正しい」方法ですか?