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

questionAnswers(4)

yourAnswerToTheQuestion