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
, Foldable
e Traversable
raggiungere 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
è fmap
specializzato per i principianti.
Data.Sequence
in Haskell? È relativamente brutto.