La mayoría de los lenguajes de programación funcionales (por ejemplo, Common Lisp, Scheme / raqueta, Clojure, Haskell, Scala, Ocaml, SML) soportan algunas funciones comunes de orden superior en las listas, como por ejemplo map, filter, takeWhile, dropWhile, foldl, foldr(véase, por ejemplo Common Lisp, Scheme / raqueta, Hoja de referencia de lado a lado de Clojure , la documentación de Haskell , Scala , OCaml y SML ).
¿C ++ 11 tiene métodos o funciones estándar equivalentes en las listas? Por ejemplo, considere el siguiente fragmento de Haskell:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
¿Cómo puedo expresar la segunda expresión en el estándar moderno C ++?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
¿Qué pasa con las otras funciones de orden superior mencionadas anteriormente?
¿Se pueden expresar directamente en C ++?
[a]. Debe ocultar la función de preludio, piratear el preludio o elegir un nombre diferente y menos intuitivo.
Functor, Foldabley Traversablelograr esto de una manera tan abstracta como puedo pensar. Data.Sequencees una instancia de todos estos, por lo que puede hacer fmap (\x -> x * x) xs. mapEstá fmapespecializado para principiantes.
Data.SequenceHaskell? Es comparativamente feo.