अधिकांश कार्यात्मक प्रोग्रामिंग भाषाओं (जैसे कॉमन लिस्प, योजना / रैकेट, Clojure, हास्केल, स्काला, OCaml, एसएमएल) जैसे सूचियों पर कुछ सामान्य उच्च क्रम काम करता है, समर्थन map, filter, takeWhile, dropWhile, foldl, foldr(देखें उदाहरण के लिए , आम लिस्प, योजना / रैकेट क्लोजर साइड-बाय-साइड संदर्भ पत्र , हास्केल , स्काला , ओकेमेल और एसएमएल प्रलेखन।)
क्या C ++ 11 में सूचियों पर समान मानक विधियाँ या कार्य हैं? उदाहरण के लिए, निम्नलिखित हास्केल स्निपेट पर विचार करें:
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हास्केल में? यह तुलनात्मक रूप से बदसूरत है।