Một mô hình không phải là hiếm trong vấn đề dự án Euler có vẻ là một cái gì đó tương đương với:thi đua một scala ParStream
Stream.from(1).map(f).takeWhile((_>0)).foldLeft(0L)(_+_)
trong đó f là một số chức năng để đắt-tính toán trả về giá trị tích cực đến một lúc nào đó không rõ, và trả về số không sau đó.
Tôi thích những thứ song song, đặc biệt là khi các bộ sưu tập song song của Scala và .par
làm cho việc này trở nên dễ dàng. Tuy nhiên, trong sự vắng mặt của một ParStream, tốt nhất mà tôi đưa ra là:
val BATCH=1024
Stream.from(1,BATCH).flatMap(
i=>(i until i+BATCH).par.map(f)
).takeWhile((_>0)).foldLeft(0L)(_+_)
mà không có vẻ rất thanh lịch và rất nhạy cảm với sự lựa chọn giá trị BATCH
(nhưng có thể mang lại những cải thiện tốc độ x4 trên của tôi bốn nhân).
Bất kỳ đề xuất nào cho các cách rõ ràng hơn để đạt được cùng một kết quả?
Ví dụ bạn đưa ra không tương đương: ví dụ với 'val f = 15 - (_: Int)' và 'BATCH = 10' cái đầu tiên cho 105 và số thứ hai 95 –
@Luigi: Đó là lý do tại sao tôi đủ điều kiện với "trả về các giá trị dương lên đến ... và trả về số không sau đó". Ví dụ: nó hoạt động với def f (x) = 0 max (15-x). – timday