Большинство функциональных языков программирования (например , 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]
. Вы должны либо скрыть функцию prelude, взломать prelude, либо выбрать другое и менее интуитивное имя.
Functor
, Foldable
И Traversable
добиться этого как абстрактно, как я могу думать. Data.Sequence
является примером всего этого, так что вы можете просто сделать fmap (\x -> x * x) xs
. map
это fmap
специализирован для начинающих.
Data.Sequence
в Haskell? Это сравнительно безобразно.