Kebanyakan bahasa pemrograman fungsional (misalnya Common Lisp, Scheme / Racket, Clojure, Haskell, Scala, Ocaml, SML) mendukung beberapa fungsi umum tingkat tinggi pada daftar, seperti map, filter, takeWhile, dropWhile, foldl, foldr(lihat misalnya Common Lisp, Scheme / Racket, Clojure lembar referensi berdampingan , Haskell , Scala , OCaml , dan dokumentasi SML .)
Apakah C ++ 11 memiliki metode atau fungsi standar yang setara pada daftar? Misalnya, perhatikan cuplikan Haskell berikut:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
Bagaimana saya bisa mengekspresikan ekspresi kedua dalam C ++ standar modern?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
Bagaimana dengan fungsi tingkat tinggi lainnya yang disebutkan di atas?
Bisakah mereka diekspresikan secara langsung dalam C ++?
[a]. Anda juga harus menyembunyikan fungsi pembuka, meretas pendahuluan, atau memilih nama yang berbeda dan kurang intuitif.
Functor,, Foldabledan Traversablecapai ini dengan cara abstrak yang saya bisa pikirkan. Data.Sequenceadalah contoh dari semua ini, jadi Anda bisa melakukannya fmap (\x -> x * x) xs. mapadalah fmapkhusus untuk pemula.
Data.Sequencedi Haskell? Ini relatif jelek.