Как в этом коде:
import Data.Char
groupsOf _ [] = []
groupsOf n xs =
take n xs : groupsOf n ( tail xs )
problem_8 x = maximum . map product . groupsOf 5 $ x
main = do t <- readFile "p8.log"
let digits = map digitToInt $concat $ lines t
print $ problem_8 digits
Я понимаю, что в Haskell многие программы создают и, кажется, сохраняют некоторые промежуточные результаты , например, список groupsOf
в приведенном выше коде. Приведенный выше код является справочным ответом на проблему 8 проекта Эйлера, взятым с веб-сайта Haskell . Исходный вопрос задает наибольшее произведение из 5 последовательных цифр в очень длинной цепочке цифр, такой как 45343231635723421312443535767983456
.
Таким образом, код рассчитает все продукты и сохранит их в виде списка. На других языках, я думаю, они сохранят только временное наибольшее значение и отбросят все меньшее.
Так действительно ли groupsOf
хранит все промежуточные результаты? что, если проблема возрастет? Будет ли выделено слишком много памяти?