У меня есть функцияПутаница относительно лени
myLength = foldl (\ x _ -> x + 1) 0
, который терпит неудачу с переполнение стека с входом около 10^6 элементов (myLength [1..1000000] терпит неудачу). Я полагаю, что это связано с нарастанием thunk с тех пор, как я заменил foldl на foldl ', он работает. Пока все хорошо.
Но теперь у меня есть еще одна функция, чтобы полностью изменить список:
myReverse = foldl (\ acc x -> x : acc) []
который использует ленивую версию foldl (вместо из foldl ')
Когда я myLength . myReverse $ [1..1000000]
. На этот раз он отлично работает. Я не понимаю, почему foldl работает для более позднего случая, а не для прежнего?
Для уточнения здесь myLength использует foldl»в то время как myReverse использует foldl
мой плохой !! исправил его –
Я получаю исключение переполнения стека для обоих случаев. – dave4420
Нет, это только логотип в верхней части сайта, на который вы смотрите;) (я не получаю исключение для myReverse) – Artelius