En Haskell, comme dans de nombreux autres langages fonctionnels, la fonction foldl
est définie de telle façon que, par exemple, foldl (-) 0 [1,2,3,4] = -10
.
C'est OK, car foldl (-) 0 [1, 2,3,4]
est, par définition, ((((0 - 1) - 2) - 3) - 4)
.
Mais, dans la Raquette, (foldl - 0 '(1 2 3 4))
est de 2, parce que la Raquette "intelligemment" calcule comme ceci: (4 - (3 - (2 - (1 - 0))))
, ce qui en effet est de 2.
Bien sûr, si nous définissons la fonction auxiliaire flip, comme ceci:
(define (flip bin-fn)
(lambda (x y)
(bin-fn y x)))
puis nous avons pu dans la Raquette d'obtenir le même comportement que dans Haskell: au lieu de (foldl - 0 '(1 2 3 4))
on peut écrire: (foldl (flip -) 0 '(1 2 3 4))
La question est: Pourquoi est - foldl
dans la raquette défini dans un tel impair (non standard et non intuitives) manière, différemment que dans toute autre langue?