peut-on parcourir un tableau sans utiliser de boucle imperative? (for ou while)
peut-on parcourir un tableau sans utiliser de boucle imperative? (for ou while)
Oui.
D'une part avec les iter* (mais ça reste des solutions impératives en général), et surtout avec map et, plus généralement, les fold_*.
Bien sûr on peut recoder tout ça avec une récursion.
Tu vois une boucle dans mon programme ? De toute façon il n'y a pas de boucles en Haskell.
est le bout de code qui parcourt le tableau : assocs convertit le tableau vers une liste de couples (index, élément) et maximumBy est un simple fold (foldl1 . maxBy). Dans un autre langage qu'Haskell, le assocs tuerait les performances, mais ici en fait la "liste" n'est jamais vraiment créée, le parcours se fait en O(1) niveau consommation mémoire (comme une boucle parcourant un tableau en impératif). En fait avec les optimisations appropriées (stream fusion), ce bout de code de haut-niveau peut-être traduit en une joli boucle bien minimale en assembleur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part maximumBy (comparing snd) . assocs
--
Jedaï
Partager