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
, Foldable
Et y Traversable
parvenir d' une manière aussi abstraite que d' un je peux penser. Data.Sequence
est une instance de tout cela, vous pouvez donc le faire fmap (\x -> x * x) xs
. map
est fmap
spécialisé pour les débutants.
Data.Sequence
à Haskell? C'est relativement moche.