2017-08-05 2 views
0

Pourquoi l'accumulateur AccIn n'est pas le paramètre gauche pour Fun? http://erlang.org/doc/man/lists.html#foldl-3Erlang: paramètres de fonction Foldl échangés

foldl(Fun, Acc0, List) -> Acc1 


Fun = fun((Elem :: T, AccIn) -> AccOut) 
Acc0 = Acc1 = AccIn = AccOut = term() 
List = [T] 
T = term() 

Je demande cela parce que presque tous les autres langages fonctionnels (par exemple haskell, scala) a fait le l'inverse. Vous êtes censé visualiser un pli gauche en accumulant de la gauche comme

foldl f z [x1, x2, ..] = ((z f x1) f x2) ..

Répondre

0

Il est le même que dans Haskell:

foldl (Fun, ACC0, Liste) -> Acc1

foldl :: (a -> b -> a) -> a -> [b] -> un

+0

Non. Je pense que vous avez manqué la spécification pour le foldl d'erlang. Essayez de comparer cela avec la version haskell. –

+0

Je l'ai copié à partir du manuel –

+0

Ce que vous avez copié est la spécification haskell. '(a -> b -> a)' a 'a' comme le même type que l'accumulateur. Comparez maintenant cela à erlang's qui est plus du genre '(b -> a -> a)' et vous obtiendriez de quoi je parle. –

0

cohérence de l'ordre de discussion entre les différentes versions des plis était tout simplement considéré comme plus important que toute visualisation algébrique telle que vous mentionnez.