Глядя на решения Project Euler на http://pavelfatin.com/scala-for-project-euler/, Я был немного озадачен тем, как вид играет роль в решении задачи 10
Рассчитайте сумму всех простых чисел ниже двух миллионов. "
Предлагаемое решение:
lazy val ps: Stream[Int] = 2 #:: ps.map(i => Stream.from(i + 1).find(
j => ps.takeWhile(k => k * k <= j).forall(j % _ > 0)).get)
val r = ps.view.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
... что приводит к 142913828922
Я заметил, что вы получите другой результат, 1179908154
, если вы не включите вид:
val r = ps.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
Может кто-нибудь объяснить мне, почему они отличаются?