Die meisten funktionalen Programmiersprachen (zB Common Lisp, Scheme / Schläger, Clojure, Haskell, Scala, Ocaml, SML) unterstützen einige gemeinsame Funktionen höherer Ordnung auf Listen, wie map
, filter
, takeWhile
, dropWhile
, foldl
, foldr
(siehe zB Common Lisp, Scheme / Schläger, Clojure Seite an Seite Referenzblatt , die Haskell- , Scala- , OCaml- und die SML- Dokumentation.)
Verfügt C ++ 11 über gleichwertige Standardmethoden oder -funktionen für Listen? Betrachten Sie beispielsweise das folgende Haskell-Snippet:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
Wie kann ich den zweiten Ausdruck in modernem Standard-C ++ ausdrücken?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
Was ist mit den anderen Funktionen höherer Ordnung, die oben erwähnt wurden?
Können sie direkt in C ++ ausgedrückt werden?
[a]
. Sie müssen entweder die Vorspielfunktion ausblenden, das Vorspiel durchgehen oder einen anderen und weniger intuitiven Namen wählen.
Functor
, Foldable
und Traversable
dies auf eine so abstrakte Art und Weise zu erreichen, wie ich denken kann. Data.Sequence
ist eine Instanz von all diesen, so können Sie einfach tun fmap (\x -> x * x) xs
. map
ist fmap
spezialisiert für Anfänger.
Data.Sequence
in Haskell durchzuführen ? Es ist vergleichsweise hässlich.