La maggior parte dei linguaggi di programmazione funzionale (ad esempio Common Lisp, Scheme / Racket, Clojure, Haskell, Scala, OCaml, SML) supportano alcune funzioni comuni di ordine superiore delle liste, come ad esempio map, filter, takeWhile, dropWhile, foldl, foldr(si veda ad esempio Common Lisp, Scheme / Racket, Clojure: foglio di riferimento affiancato , Haskell , Scala , OCaml e documentazione SML .)
C ++ 11 ha metodi o funzioni standard equivalenti negli elenchi? Ad esempio, considera il seguente frammento di Haskell:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
Come posso esprimere la seconda espressione nel moderno standard C ++?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
Che dire delle altre funzioni di ordine superiore menzionate sopra?
Possono essere espressi direttamente in C ++?
[a]. Devi nascondere la funzione di preludio, aggirare il preludio o scegliere un nome diverso e meno intuitivo.
Functor, Foldablee Traversableraggiungere questo obiettivo nel modo più astratto che posso pensare. Data.Sequenceè un'istanza di tutti questi, quindi puoi semplicemente farlo fmap (\x -> x * x) xs. mapè fmapspecializzato per i principianti.
Data.Sequencein Haskell? È relativamente brutto.