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
, Foldable
y Traversable
lograr esto de una manera tan abstracta como puedo pensar. Data.Sequence
es una instancia de todos estos, por lo que puede hacer fmap (\x -> x * x) xs
. map
Está fmap
especializado para principiantes.
Data.Sequence
Haskell? Es comparativamente feo.