Не займет ли этот код Haskell слишком много памяти?

Как в этом коде:

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 хранит все промежуточные результаты? что, если проблема возрастет? Будет ли выделено слишком много памяти?

9
задан recursion.ninja 20 August 2015 в 19:56
поделиться