Giả sử tôi cózipWith (lập bản đồ trên nhiều Seq) trong Scala
val foo : Seq[Double] = ...
val bar : Seq[Double] = ...
và tôi muốn tạo ra một seq nơi baz (i) = foo (i) + bar (i). Một cách tôi có thể nghĩ ra để làm điều này là
val baz : Seq[Double] = (foo.toList zip bar.toList) map ((f: Double, b : Double) => f+b)
Tuy nhiên, điều này cảm thấy cả hai xấu xí và không hiệu quả - Tôi phải chuyển đổi cả seqs vào danh sách (trong đó phát nổ với danh sách lười biếng), tạo danh sách tạm thời này của các bộ, chỉ để lập bản đồ trên nó và để cho nó được GCed. Có lẽ suối giải quyết vấn đề lười biếng, nhưng trong mọi trường hợp, điều này cảm thấy như không cần thiết xấu xí. Trong lisp, chức năng bản đồ sẽ lập bản đồ trên nhiều trình tự. Tôi sẽ viết
(mapcar (lambda (f b) (+ f b)) foo bar)
Và không có danh sách tạm thời nào được tạo ở bất cứ đâu. Có một bản đồ-over-nhiều-danh sách chức năng trong Scala, hoặc là zip kết hợp với destructuring thực sự là 'đúng' cách để làm điều này?
Xin lỗi, không có zipWith trên Scala 2.8. –
Chỉ cần được rõ ràng (và tôi chắc chắn Daniel sẽ đồng ý), Scala không có gì để xin lỗi cho ở đây - những gì bạn nhận được với Scala thậm chí còn tốt hơn. Xem câu trả lời của Martin dưới đây và của Daniel. Sẽ tốt hơn nếu ai đó có thể đưa ra câu trả lời được chấp thuận của Martin cho câu hỏi này ... – AmigoNico