Я начинаю изучать язык функционального программирования, например Haskell
, ML
, и большинство упражнений будут демонстрировать такие вещи, как:
foldr (+) 0 [ 1 ..10]
что эквивалентно
sum = 0
for( i in [1..10] )
sum += i
Итак, это заставляет меня думать, почему компилятор не знает, что это Арифметическая прогрессия и использовать формулу O (1) для вычисления?
Особенно для чистых языков FP
без побочного эффекта?
То же самое относится к
sum reverse list == sum list
Учитывая a + b = b + a и определение reverse, могут ли компиляторы/языки доказать это автоматически?