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, Foldableund Traversabledies auf eine so abstrakte Art und Weise zu erreichen, wie ich denken kann. Data.Sequenceist eine Instanz von all diesen, so können Sie einfach tun fmap (\x -> x * x) xs. mapist fmapspezialisiert für Anfänger.
Data.Sequencein Haskell durchzuführen ? Es ist vergleichsweise hässlich.