Предположим, что у меняzipWith (отображение на нескольких Seq) в Scala
val foo : Seq[Double] = ...
val bar : Seq[Double] = ...
и я желаю, чтобы произвести, где SEQ Баз (я) = Foo (I) + бар (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 в сочетании с деструкцией действительно «правильного» способа сделать это?
Извините, нет zipWith на Scala 2.8. –
Просто, чтобы быть ясным (и я уверен, что Даниэль согласился бы), Скале нечего извиняться за это - то, что вы получаете с Scala, еще лучше. См. Ответ Мартина ниже и Даниил. Было бы неплохо, если бы кто-нибудь смог утвердить ответ Мартина на этот вопрос ... – AmigoNico