Envoyé par
bluestorm
Il existe quand même des cas où la recursion explicite est à mon avis bienvenue, faute de mieux.
Je n'ai jamais dit le contraire, néanmoins je ne suis pas d'accord du tout que l'emploi de filter ou map soit d'une quelconque façon contraire à la philosophie d'OCaml, au contraire !
Envoyé par
bluestorm
Par exemple :
1 2 3
| let rec split = function
| ([] | [_]) as li -> li, []
| ha::hb::tl -> let a, b = split tl in ha::a, hb::b |
Bon exemple.
En Haskell, je tendrais à l'écrire avec un foldr, mais il est vrai que Haskell a une philosophie encore plus orienté combinateur et fonction de haut niveau que OCaml, je ne le nie pas, je conteste l'emplacement de la frontière.
split = foldr (\x ~(ys,xs)->(x:xs,ys)) ([],[])
let split l = List.fold_right (fun x (ys,xs) -> x :: xs, ys) l ([],[])
pour troller je dirais que les confirmés aussi, puisque les haskelliens n'ont pas été foutu de mettre l'ordre correct des arguments de fold_right
Disons l'ordre que tu aurais préféré plutôt que l'ordre "correct"... Comme tu le vois ci-dessus cet ordre est tout de même très pratique pour créer des fonctions partiellement appliquées.
--
Jedaï
Partager