La plupart des langages de programmation fonctionnelle (par exemple , en Common Lisp, Scheme / Racket, Clojure, Haskell, Scala, Ocaml, SML) prennent en charge certaines fonctions communes d'ordre supérieur sur les listes, telles que map, filter, takeWhile, dropWhile, foldl, foldr(voir par exemple Common Lisp, Scheme / Racket, Clojure côte à côte , la feuille de référence , la documentation Haskell , Scala , OCaml et SML .)
C ++ 11 a-t-il des méthodes ou fonctions standard équivalentes sur les listes? Par exemple, considérez l'extrait de code Haskell suivant:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
Comment puis-je exprimer la deuxième expression en C ++ standard moderne?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
Qu'en est-il des autres fonctions d'ordre supérieur mentionnées ci-dessus?
Peut-on les exprimer directement en C ++?
[a]. Vous devez soit masquer la fonction prélude, pirater le prélude, soit choisir un nom différent et moins intuitif.
Functor, FoldableEt y Traversableparvenir d' une manière aussi abstraite que d' un je peux penser. Data.Sequenceest une instance de tout cela, vous pouvez donc le faire fmap (\x -> x * x) xs. mapest fmapspécialisé pour les débutants.
Data.Sequenceà Haskell? C'est relativement moche.