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
,, Foldable
dan Traversable
capai ini dengan cara abstrak yang saya bisa pikirkan. Data.Sequence
adalah contoh dari semua ini, jadi Anda bisa melakukannya fmap (\x -> x * x) xs
. map
adalah fmap
khusus untuk pemula.
Data.Sequence
di Haskell? Ini relatif jelek.