Pour ceux qui ne connaissent pas:
http://www.willamette.edu/~fruehr/ha...evolution.html
Voilà !
Pour ceux qui ne connaissent pas:
http://www.willamette.edu/~fruehr/ha...evolution.html
Voilà !
Oui, bon, faire péter les functors pour calculer une factorielle, faut pas déconner non plus.
J'ai été déçu par moi-même quand j'ai réalisé que je l'aurais codé
fac 0 = 1
fac n = n*fac (n-1)
Au lieu du superbe (et pointless) :
fac = foldr (*) . enumFromTo 1
J'ai pas encore tout à fait le réflexe fold, je crois, snif.
Prends le reflexe surtout
Bon et puis euh,reste quand même de loin la meilleure méthode
Code : Sélectionner tout - Visualiser dans une fenêtre à part product [1..n]
Bon ok, product c'est pas si bien, parce que c'est lazy. Il vaut mieux foldl1' (*) [1..n]
J'en ai trouvé une autre sur le net qui n'est pas recensée ici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part fac n = (foldr (.) id [(*k) | k <- [1..n]]) 1
Ouais, c'est une connerie dans le Report à mon avis, product et sum utilisent foldl1... Si on voulait vraiment qu'ils soient paresseux on aurait dû utiliser foldr1, et si on voulait qu'ils soient efficaces dans tous les cas courants, on aurait dû employer foldl1'.
Enfin au moins GHC peut déduire qu'ils sont stricts et les optimise (si -O2 est activé) en version stricte compilée.
--
Jedaï
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager