大多数函数式编程语言(如Common Lisp的,计划/球拍,Clojure中,Haskell中,斯卡拉,ocaml的,SML)支持列出了一些常见的高阶功能,如map
,filter
,takeWhile
,dropWhile
,foldl
,foldr
(见如Common Lisp的,计划/球拍, 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 ++表示吗?
“比较难看。”:与什么相比?
—
乔治
也许您是对的,但是这个问题的主题是如何在C ++中表达公共列表的高阶函数,而不是如何在Haskell中的Data.Sequence上实现类似的函数。
—
乔治
@delnan我认为Haskell的方法更为通用。
—
亚历克2015年
Functor
,,Foldable
并Traversable
以我能想到的抽象方式来实现。Data.Sequence
是所有这些的实例,因此您可以这样做fmap (\x -> x * x) xs
。map
是fmap
专门为初学者。
Data.Sequence
在Haskell的a上执行这些操作吗?比较难看。