Большинство функциональных языков программирования (например , 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? Это сравнительно безобразно.