De toute façon, ce forum est un peu universel...
(***) et (&&&) sont des opérateurs que j'ai emprunté à Control.Arrow, ils s'appliquent à toutes les instances de la typeclass Arrow, y compris donc aux fonctions (consulte cette page et les liens afférents éventuellement pour plus de détail sur Arrow).
En gros ils sont déjà très utiles même si on ne programme pas avec des Arrow, leurs instances sur les fonctions sont :
Mon "dup f" est donc juste une fonction qui applique f aux deux composantes d'un tuple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 (a -> b) -> (c -> d) -> (a, c) -> (b, d) f *** g (x,y) = (f x, g y) (a -> b) -> (a -> c) -> a -> (b, c) f &&& g x = (f x, g x)
Les &&& et les *** quand on y est habitué rendent évident le flot de l'évaluation, mais on aurait aussi pu écrire :
(mais ça fait trop de parenthèses et de redondances à mon goût)
Code Haskell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 pairs = zipWith (\p2n sn->(p2n * abs (re sn), p2n * abs (im sn))) p2 s where s = iterate (<*> (3 :+ 4)) (1 :+ 0) p2 = iterate (* 2) 1
--
Jedaï
Partager