Просматривая Функциональное программирование в Scala, я столкнулся с этим вопросом:
Можете ли вы сфотографировать foldLeft с точки зрения foldRight? Как насчет другого пути вокруг?
В решении, предоставленном авторами, они обеспечили реализацию следующим образом:
def foldRightViaFoldLeft_1[A,B](l: List[A], z: B)(f: (A,B) => B): B =
foldLeft(l, (b:B) => b)((g,a) => b => g(f(a,b)))(z)
def foldLeftViaFoldRight[A,B](l: List[A], z: B)(f: (B,A) => B): B =
foldRight(l, (b:B) => b)((a,g) => b => g(f(b,a)))(z)
Может кто-нибудь помочь мне проследить это решение и заставить меня понять, как это фактически получает foldl, реализованный в терминах foldr и наоборот?
Спасибо