#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.