Por que o foldl é definido de maneira estranha no Racke
Em Haskell, como em muitas outras linguagens funcionais, a funçãofoldl
é definido de forma que, por exemplo,foldl (-) 0 [1,2,3,4] = -10
.
Isso é bom, porquefoldl (-) 0 [1, 2,3,4]
é, por definição,((((0 - 1) - 2) - 3) - 4)
.
Mas, na raquete,(foldl - 0 '(1 2 3 4))
é 2, porque o Raquete "inteligentemente" calcula assim:(4 - (3 - (2 - (1 - 0))))
, que de fato é 2.
Claro, se definirmos a função auxiliar flip, assim:
(define (flip bin-fn)
(lambda (x y)
(bin-fn y x)))
; então, em Racket, conseguimos o mesmo comportamento de Haskell: em vez de(foldl - 0 '(1 2 3 4))
nós podemos escrever:(foldl (flip -) 0 '(1 2 3 4))
A pergunta é: por que éfoldl
na raquete definida de uma maneira estranha (fora do padrão e não intuitiva), de maneira diferente de qualquer outro idiom