к
если складывать числа в foldr, то когда результат затребуют, то сначала сгенерируется структура вида 0 + (1 + (2 + ...)), и только потом она начнет вычисляться. То есть в памяти будет вся эта огромная цепочка сложений
Size: a a a
к
к
к
A
к
A
AP
AS
AP
AP
o'clock
в хаскеле можно такие имена иметьAP
seq
, он же $!
AP
let x = product [1..100]
in x `seq` x
Здесь "a `seq` b
" означает "верни b
, предварительно вычислив до WHNF a
"AP
f $! x
применит f
к x
, предварительно вычислив x
(до WHNF, опять же)AP
AS
AA
foldl (<>) 0 [a, b] === (0 <> a) <> b
, т.е. для него работает то же объяснение через переписывание как применение операторов с определенным образом расставленными скобками, что и для foldr, для foldl' все не так просто ужеA
foldl (<>) 0 [a, b] === (0 <> a) <> b
, т.е. для него работает то же объяснение через переписывание как применение операторов с определенным образом расставленными скобками, что и для foldr, для foldl' все не так просто ужеAA
AP