Większość języków programowania funkcyjnego (np Common Lisp, Scheme / rakieta, Clojure, Haskell, Scala, Ocaml, SML) obsługuje niektórych funkcji wspólnego wyższego rzędu na listach, takich jak map, filter, takeWhile, dropWhile, foldl, foldr(patrz np Common Lisp, Scheme / rakieta, Clojure obok siebie dokumentacja , dokumentacja Haskell , Scala , OCaml i SML ).
Czy C ++ 11 ma równoważne standardowe metody lub funkcje na listach? Weźmy na przykład następujący fragment kodu Haskell:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
Jak mogę wyrazić drugie wyrażenie we współczesnym standardowym języku C ++?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
Co z innymi funkcjami wyższego rzędu wymienionymi powyżej?
Czy można je bezpośrednio wyrazić w C ++?
[a]. Musisz ukryć funkcję preludium, zhakować preludium lub wybrać inną i mniej intuicyjną nazwę.
Functor, Foldablei Traversableosiągnę to w sposób tak abstrakcyjny, jak tylko potrafię. Data.Sequencejest ich przykładem, więc możesz to zrobić fmap (\x -> x * x) xs. mapjest fmapspecjalistyczne dla początkujących.
Data.Sequencew Haskell? Jest stosunkowo brzydki.