Hầu hết các ngôn ngữ lập trình chức năng (ví dụ Common Lisp, Đề án / Racket, Clojure, Haskell, Scala, Ocaml, SML) hỗ trợ một số chức năng phổ biến bậc cao trên danh sách, chẳng hạn như map
, filter
, takeWhile
, dropWhile
, foldl
, foldr
(xem ví dụ Common Lisp, Đề án / vợt, Clojure side-by-side tờ tài liệu tham khảo , các Haskell , Scala , OCaml , và SML tài liệu.)
C ++ 11 có các phương thức hoặc hàm tiêu chuẩn tương đương trong danh sách không? Ví dụ: hãy xem xét đoạn trích Haskell sau:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
Làm thế nào tôi có thể diễn tả biểu thức thứ hai trong C ++ tiêu chuẩn hiện đại?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
Còn các hàm bậc cao khác được đề cập ở trên thì sao?
Họ có thể được thể hiện trực tiếp trong C ++?
[a]
. Bạn có thể phải ẩn chức năng mở đầu, hack xung quanh khúc dạo đầu hoặc chọn một tên khác và ít trực quan hơn.
Functor
, Foldable
và Traversable
đạt được điều này theo cách trừu tượng như tôi có thể nghĩ. Data.Sequence
là một ví dụ của tất cả những điều này, vì vậy bạn chỉ có thể làm fmap (\x -> x * x) xs
. map
là fmap
chuyên ngành cho người mới bắt đầu.
Data.Sequence
trong Haskell chưa? Nó tương đối xấu.