Size: a a a

2021 January 28

к

кана in Haskell Start
whnf значения типа int это например уже само число, поэтому если в foldl' складывать инты, то они будут складываться сразу, как в строгом языке (ну в момент когда результат foldl' затребуют/сматчат, а не в момент вызова конечно)

если складывать числа в foldr, то когда результат затребуют, то сначала сгенерируется структура вида 0 + (1 + (2 + ...)), и только потом она начнет вычисляться. То есть в памяти будет вся эта огромная цепочка сложений
источник

к

кана in Haskell Start
или это с foldl, я запутался, лучше мне ничего не писать на эту тему
источник

к

кана in Haskell Start
был какой-то сайт, на котором пишешь выражения, и он показывает шаги редукции в ленивом языке, советую поискать
источник

A

Aragaer in Haskell Start
foldr считает с конца и для бесконечных вычислений непродуктивен. foldl будет что-то полезное творить даже для бесконечных, но будут отложенные вычисления. А foldl' будет сразу форсить
источник

к

кана in Haskell Start
ващет, именно на бесконечных вычислениях только foldr и имеет смысл
источник

A

Aragaer in Haskell Start
значит перепутал
источник

AP

Aleksei (astynax) Pi... in Haskell Start
foldl без штриха вообще крайне редко нужен. В таких ситуациях ты обычно точно знаешь, что тебе нужна ленивость в аккумуляторе.
источник

AS

Artur Sult in Haskell Start
штрих это такой оператор? Который заставляет функцию не лениться и вычислить значение?
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Нет, просто соглашение при именовании
источник

AP

Aleksei (astynax) Pi... in Haskell Start
o'clock в хаскеле можно такие имена иметь
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Оператор, который заставляет не лениться, есть — seq, он же $!
источник

AP

Aleksei (astynax) Pi... in Haskell Start
let x = product [1..100]
in x `seq` x
Здесь "a `seq` b" означает  "верни b, предварительно вычислив до WHNF a"
источник

AP

Aleksei (astynax) Pi... in Haskell Start
f $! x применит f к x, предварительно вычислив x (до WHNF, опять же)
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Вообще рекомендую почитать это:
https://www.fpcomplete.com/haskell/tutorial/all-about-strictness/
источник

AS

Artur Sult in Haskell Start
thanks
источник

AA

A64m AL256m qn<co... in Haskell Start
у foldl по большому счету одна фича - понятность. foldl (<>) 0 [a, b] === (0 <> a) <> b, т.е. для него работает то же объяснение через переписывание как применение операторов с определенным образом расставленными скобками, что и для foldr, для foldl' все не так просто уже
источник

A

Aleksandr Khristenko in Haskell Start
A64m AL256m qn I0
у foldl по большому счету одна фича - понятность. foldl (<>) 0 [a, b] === (0 <> a) <> b, т.е. для него работает то же объяснение через переписывание как применение операторов с определенным образом расставленными скобками, что и для foldr, для foldl' все не так просто уже
Разница в том, что в foldl' появляется seq?
источник

AA

A64m AL256m qn<co... in Haskell Start
ну и seq не простая функция, она плохо объясняется через переписывание
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Aleksandr Khristenko
Разница в том, что в foldl' появляется seq?
Там bangs, скорее всего
источник

AP

Aleksei (astynax) Pi... in Haskell Start
источник