Çoğu fonksiyonel programlama dilleri (mesela Common Lisp, Scheme / Raket, Clojure, Haskell, Scala, Ocaml, SML) gibi listelerde bazı ortak yüksek mertebeden fonksiyonları desteklemek map
, filter
, takeWhile
, dropWhile
, foldl
, foldr
mesela (bkz , Common Lisp, Scheme / Racket Clojure yan yana referans sayfası , Haskell , Scala , OCaml ve SML belgeleri.)
C ++ 11, listelerde eşdeğer standart yöntem veya işlevlere sahip mi? Örneğin, şu Haskell snippet'ini düşünün:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
Modern C ++ standardında ikinci ifadeyi nasıl ifade edebilirim?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
Yukarıda bahsedilen diğer üst düzey işlevler ne olacak?
Doğrudan C ++ ile ifade edilebilirler mi?
[a]
. Başlangıç işlevini gizlemeniz, başlangıçta hacklemeniz veya farklı ve daha az sezgisel bir ad seçmeniz gerekir.
Functor
, Foldable
ve Traversable
bunu olabildiğince soyut bir şekilde başar. Data.Sequence
bunların hepsinin bir örneğidir, yani bunu yapabilirsiniz fmap (\x -> x * x) xs
. map
olduğu fmap
başlayanlar için uzman.
Data.Sequence
Haskell'de bu işlemleri hiç denediniz mi? Nispeten çirkin.