ส่วนใหญ่ทำงานเขียนโปรแกรมภาษา (เช่น Common เสียงกระเพื่อมโครงการ / แร็กเก็ต, Clojure, Haskell, สกาล่า Ocaml, SML) สนับสนุนบางส่วนทำงานร่วมกันขั้นสูงในรายการเช่นmap
, filter
, takeWhile
, dropWhile
, foldl
, foldr
(ดูเช่นCommon เสียงกระเพื่อมโครงการ / แร็กเก็ต, 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? มันค่อนข้างน่าเกลียด