Будет ли какой-либо компилятор/исполняемый файл функционального языка сокращать все привязанные итерации до одного при его применении? С точки зрения программиста мы могли оптимизировать функциональный код с такими конструкциями, как ленивость и потоки, но мне интересно узнать другую сторону истории. Мой функциональный пример написан в Scala, но, пожалуйста, не ограничивайте свои ответы на этот язык.
Функциональный способ:
// I assume the following line of code will go
// through the collection 3 times, one for creating it
// one for filtering it and one for summing it
val sum = (1L to 1000000L).filter(_ % 2 == 0).sum // => 250000500000
Я бы хотел, чтобы компилятор оптимизировал к императивному эквиваленту:
/* One iteration only */
long sum, i;
for (i = 1L, sum = 0L; i <= 1000000L; i++) {
if (i % 2 == 0)
sum += i;
}