foldl / foldr не попадает в stackoverflow

#haskell #stack-overflow

#haskell #переполнение стека

Вопрос:

Я читаю это https://wiki.haskell.org/Foldr_Foldl_Foldl’ , но когда я пытаюсь воспроизвести код, такой как

 foldl k = go
    where
        go z [] = z
        go z (x:xs) = let z' = k z x
            in foldl k z' xs

sum2 = foldl ( ) 0
try2 = sum2 [1..10000000]
  

Мой ноутбук зависает на некоторое время и оценивает его, а не возвращает stackoverflow, как ожидалось.

Даже когда я пытаюсь foldr ( ) 0 [1..1000000], Я не смогу получить stackoverflow, если не увеличу размер списка.

Что-то изменилось с момента написания статьи? Есть идеи?

Я загружаю файл с помощью:l foldes.hs, работающий со стеком ghci. Я попробовал следующее, чтобы уменьшить размер моего стека, но, возможно, это был неправильный способ.

stack ghci RTS -K2M -RTS

Ответ №1:

Ограничение стека по умолчанию увеличено до 80% физической памяти. Для установки параметра с stack помощью stack ghci --ghci-options=" RTS -K2M" . Я действительно получил переполнение таким образом в GHC 8.8.4.