Більшість функціональних мов програмування (наприклад , Common Lisp, Scheme / ракетки, Clojure, Haskell, Scala, Ocaml, SML) підтримують деякі загальні функції вищого порядку в списках, такі як map
, filter
, takeWhile
, dropWhile
, foldl
, foldr
(см , наприклад , Common Lisp, Scheme / Ракетка, Довідковий лист Clojure , документація Haskell , Scala , OCaml та документація SML .)
Чи C ++ 11 має еквівалентні стандартні методи або функції у списках? Наприклад, розглянемо наступний фрагмент Haskell:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
Як я можу виразити другий вираз у сучасному стандарті C ++?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
А що з іншими згаданими вище функціями вищого порядку?
Чи можуть вони бути безпосередньо виражені в C ++?
[a]
. Вам або потрібно приховати функцію прелюдії, зламати прелюдію або вибрати інше і менш інтуїтивне ім’я.
Functor
, Foldable
і Traversable
досягти цього настільки абстрактно, як я можу подумати. Data.Sequence
є екземпляром всього цього, тому ви можете просто зробити fmap (\x -> x * x) xs
. map
це fmap
спеціалізований для початківців.
Data.Sequence
в Haskell? Це порівняно некрасиво.