A maioria das linguagens de programação funcional (por exemplo, Common Lisp, Scheme / raquete, Clojure, Haskell, Scala, Ocaml, SML) suporta algumas funções comuns de ordem superior em listas, como map
, filter
, takeWhile
, dropWhile
, foldl
, foldr
(ver, por exemplo Common Lisp, Scheme / Racket, Folha de referência lado a lado do Clojure , a documentação de Haskell , Scala , OCaml e SML .)
O C ++ 11 possui métodos ou funções padrão equivalentes nas listas? Por exemplo, considere o seguinte snippet Haskell:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
Como posso expressar a segunda expressão no padrão C ++ moderno?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
E as outras funções de ordem superior mencionadas acima?
Eles podem ser expressos diretamente em C ++?
[a]
. Você precisa ocultar a função prelúdio, percorrer o prelúdio ou escolher um nome diferente e menos intuitivo.
Functor
, Foldable
e Traversable
consiga isso da maneira mais abstrata possível. Data.Sequence
é uma instância de tudo isso, então você pode fazer fmap (\x -> x * x) xs
. map
é fmap
especializado para iniciantes.
Data.Sequence
em Haskell? É relativamente feio.