Я уже довольно давно пытаюсь обернуть голову в сторону foldr и foldl, и я решил, что следующий вопрос должен решить эту проблему за меня. Предположим, вы передаете следующий список [1,2,3] следующим четырем функциям:
a = foldl (\xs y -> 10*xs -y) 0
b = foldl (\xs y -> y - 10 * xs) 0
c = foldr (\y xs -> y - 10 * xs) 0
d = foldr (\y xs -> 10 * xs -y) 0
Результаты будут -123, 83, 281 и -321 соответственно.
Почему это так? Я знаю, что когда вы передаете [1,2,3,4] в функцию, определенную как
f = foldl (xs x -> xs ++ [f x]) []
он расширяется до ((([] ++ [1]) ++ [2]) ++ [3]) ++ [4]
В том же духе, до чего расширяются приведенные выше функции a, b, c и d?