2013-06-03 30 views
9

मैं इस लेख को पढ़ रहा हूं: http://en.wikipedia.org/wiki/Function_pointer और मैं उलझन में हूं। सी/सी ++ समर्थन फ़ंक्शन पॉइंटर्स के बाद से, इसका मतलब यह नहीं है कि वे सामान्य रूप से कार्यात्मक प्रोग्रामिंग का समर्थन करते हैं? ध्यान दें कि मैं वास्तव में कार्यात्मक प्रोग्रामिंग के लिए सी या सी ++ का उपयोग नहीं करना चाहता, लेकिन मैं उत्सुक हूं क्योंकि मैंने कभी नहीं सुना है कि सी या सी ++ ऐसी चीज का समर्थन करता है। (मुझे पता है कि कई कार्यात्मक प्रोग्रामिंग भाषाओं के लिए कंपाइलर्स सी में मौजूद हैं, लेकिन यह वास्तव में "समर्थन" से मेरा मतलब नहीं है)।सी/सी ++ में कार्यात्मक प्रोग्रामिंग?

+0

@cdbitesky, मुझे लगता है कि यह थोड़ा अनुचित है। सामान्य रूप से कार्यात्मक प्रोग्रामिंग की अनुमति देने में फ़ंक्शन पॉइंटर्स की भूमिका का पता लगाने की कोशिश करने में प्रश्न अपेक्षाकृत सटीक है। जाहिर है हम "कार्यात्मक प्रोग्रामिंग" की तकनीकी परिभाषाओं के बारे में कुछ समझ सकते हैं, लेकिन मुझे लगता है कि मैंने इसे अपने उत्तर में संबोधित किया है। – Gian

उत्तर

7

संपादित करें: मुझे यकीन नहीं है कि यह जवाब इतना नफरत क्यों करता है। सवाल विशेष रूप से फ़ंक्शन पॉइंटर्स से पूछता है, और क्या उनकी उपस्थिति का अर्थ है कि सी ++ "सामान्य रूप से कार्यात्मक प्रोग्रामिंग" का समर्थन करता है।

तकनीकी, बहुत उपयोगी तरीके से: हाँ *। "कार्यात्मक" प्रोग्रामिंग का असली सार यह है कि कार्य मूल्य हैं। सी और सी ++ lexical closures के आसान निर्माण और विनाश जैसी चीजों के मामले में आपको कोई मदद नहीं देंगे, और न ही partial application के संदर्भ में यह आपको कोई फर्क नहीं देगा। तथ्य यह है कि आप फंक्शंस पॉइंटर्स का उपयोग करके मूल्यों की तरह थोड़े व्यवहार करने वाले कार्यों की उपस्थिति का अनुकरण कर सकते हैं वास्तव में समकक्ष व्यक्तित्व भाषाओं का एक परिणाम है। "कार्यात्मक प्रोग्रामिंग" के साथ इसे भंग करने की कोशिश कर रहा है वास्तव में ट्यूरिंग टैरपिट में गहराई से wading है।

* वास्तव में तकनीकी भेद के लिए, सी और सी ++ में वास्तव में कोई फ़ंक्शन-टाइप मान नहीं है। फ़ंक्शन पॉइंटर फ़ंक्शन वैल्यू से अलग होता है, भले ही आप स्क्विंट करते हैं तो वे थोड़े समान दिखते हैं।

+1

फ़ैक्टर के बारे में क्या? वे एसटीएल का उपयोग करने का मानक तरीका हैं। सी ++ 11 में आपके पास मोनोमोर्फिक लैम्बडास है, और सी ++ 14 में आपके पास सामान्य लैम्बडास हैं। – gnzlbg

+2

आप सी ++ 14 के लिए गलत के रूप में मेरे उत्तर की व्याख्या करना चुन सकते हैं। प्रश्न वास्तव में फ़ंक्शन पॉइंटर्स के बारे में था। – Gian

14

कार्यात्मक प्रोग्रामिंग (यदि आप वास्तव में रुचि रखते हैं तो इसे देखें) फ़ंक्शन पॉइंटर्स या उनकी कमी के साथ बहुत कम करना है।

सी ++ एक बहु-प्रतिमानी भाषा है जिसमें एफपी, विशेष रूप से बाद के संस्करणों के लिए बहुत अधिक समर्थन है। WG21 के साथ काम करने वाले बहुत से लोग एफपी की तरह काम करते हैं और समर्थन के लिए धक्का देते हैं। सी ++ 11 में हमें लैम्ब्डा भी मिला और सी ++ 14 पॉलिमॉर्फिक लैम्बडास की शुरुआत में। इसमें कई चीजें शामिल हैं। जबकि कार्य द्वितीय श्रेणी के नागरिक रहते हैं, लैम्ब्डा ठीक से ले सकता है।

दुर्भाग्यवश पूंछ-रिकर्सन हैंडलिंग अभी भी अनिवार्य नहीं है, लेकिन संकलक वास्तव में इसे संभालते हैं, और पिछले दशक में जब भी आपने कॉन्स ओवरलोड को गड़बड़ कर दिया तो "अनंत रिकर्सन" की आसानी से रिपोर्ट भी की जाती है। :)

आप सी ++ में एफपी शैली का उपयोग करके बहुत दूर जा सकते हैं, और सीखने से आप अन्य शैलियों को चुनने पर भी बेहतर कोड बनाने में मदद कर सकते हैं। मैं सभी को SICP का अध्ययन करने के लिए प्रोत्साहित करता हूं।

+0

मैं वास्तव में ओकैमल को अभी सीखने की कोशिश कर रहा हूं, जिसके कारण मुझे विकिपीडिया की खोज और फंक्शन पॉइंटर्स में आने का कारण बन गया। मुझे लगता है कि इस सवाल को पूछकर मैं बंदूक कूद गया कि वास्तव में यह समझने के बिना कि कौन सा कार्यात्मक प्रोग्रामिंग अभी तक है। – user2258552

4

आप सी ++ में कार्यात्मक प्रोग्रामिंग कर सकते हैं, हालांकि भाषा बिल्कुल मदद नहीं करती है। पहला ऑर्डर कार्यात्मक प्रोग्रामिंग, जहां आप जितना संभव हो सके अपरिवर्तनीय मानों का उपयोग करना काफी आसान है, और वास्तव में आसान नहीं होने पर, आप वास्तव में monads लागू कर सकते हैं!

संबंधित मुद्दे