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, Foldablee Traversableconsiga 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é fmapespecializado para iniciantes.
Data.Sequenceem Haskell? É relativamente feio.