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
, Foldable
i Traversable
osiągnę to w sposób tak abstrakcyjny, jak tylko potrafię. Data.Sequence
jest ich przykładem, więc możesz to zrobić fmap (\x -> x * x) xs
. map
jest fmap
specjalistyczne dla początkujących.
Data.Sequence
w Haskell? Jest stosunkowo brzydki.