Почему в Racket странным образом определяется foldl?

В Haskell, как и во многих других функциональных языках, функцияfoldl определяется так, что, например,foldl (-) 0 [1,2,3,4] = -10.

Это нормально, потому чтоfoldl (-) 0 [1, 2,3,4] по определению((((0 - 1) - 2) - 3) - 4).

Но в Ракетке(foldl - 0 '(1 2 3 4)) равно 2, потому что ракетка "интеллектуально" рассчитывает так:(4 - (3 - (2 - (1 - 0))))что на самом деле 2.

Конечно, если мы определим вспомогательную функцию flip, вот так:

(define (flip bin-fn)
  (lambda (x y)
    (bin-fn y x)))

тогда мы могли бы в Racket добиться того же поведения, что и в Haskell: вместо(foldl - 0 '(1 2 3 4)) мы можем написать:(foldl (flip -) 0 '(1 2 3 4))

Вопрос в том, почемуfoldl в ракетке, определенной таким странным (нестандартным и не интуитивным) образом, иначе, чем в любом другом языке?

Ответы на вопрос(4)

Ваш ответ на вопрос