Size: a a a

2021 October 22

Д

Дмитрий in Haskell Start
так ведь он справа работает
а слева работает foldl
источник

JS

Jerzy Syrowiecki in Haskell Start
нет, foldr работает слева так, как будто скобки расставлены справа
источник

JS

Jerzy Syrowiecki in Haskell Start
но в реальности никаких скобок нет, есть только консы (:) на входе и аппликации на выходе
источник

JS

Jerzy Syrowiecki in Haskell Start
впрочем, это не сильно важно для понимания свёрток. давайте считать, что foldr расставляет скобки справа
источник

AP

Aleksei (astynax) Pi... in Haskell Start
обе свёртки работают, отделяя голову списка от хвоста. Отличается то, как они эту голову используют, и то, как они рекурсивно вызывают себя
источник

Д

Дмитрий in Haskell Start
это же то же самое, что работа с конца
источник

JS

Jerzy Syrowiecki in Haskell Start
ну и там не совсем id получается. а функция, эквивалентная id по получаемому результату, но foldr (:) [] работает за O(n), в то время как id за O(1). @ceguan почему такая разница?
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Работа с конца сделала бы невозможной обработку с помощью foldr бесконечных списков :)
источник

Д

Дмитрий in Haskell Start
foldr переберет все элементы, id их не смотрит?
источник

JS

Jerzy Syrowiecki in Haskell Start
нет. не знаю, что вы понимаете под "работа", но при любом толковании нет
источник

JS

Jerzy Syrowiecki in Haskell Start
да
источник

Д

Дмитрий in Haskell Start
как же тогда это понимать
источник

ЗП

Зигохистоморфный Пре... in Haskell Start
Ибо через фолдр это именно реконструктор
источник

JS

Jerzy Syrowiecki in Haskell Start
как вычисление, например. а парядок вычисления — это лень
источник

JS

Jerzy Syrowiecki in Haskell Start
ты не ученик
источник

Д

Дмитрий in Haskell Start
сложно
источник

ЗП

Зигохистоморфный Пре... in Haskell Start
?
источник

JS

Jerzy Syrowiecki in Haskell Start
следующий уровень: опишите, что вычисляет foldr (:) и почему. подсказка: попробуйте foldr (:) "hello" "world" в репле
источник

D

Dreamerinnoise in Haskell Start
Prelude> foldr (\x y -> concat ["(",x,"+",y,")"]) "0" (map show [1..13])
"(1+(2+(3+(4+(5+(6+(7+(8+(9+(10+(11+(12+(13+0)))))))))))))"

Prelude> foldl (\x y -> concat ["(",x,"+",y,")"]) "0" (map show [1..13])
"(((((((((((((0+1)+2)+3)+4)+5)+6)+7)+8)+9)+10)+11)+12)+13)"
источник

D

Dreamerinnoise in Haskell Start
источник