2011-01-31 25 views
18

मुझे आश्चर्य है कि सी ++ 0x (सी ++ 11) (लैम्बडास और सही अग्रेषण के साथ) एक कार्यात्मक भाषा है (एक सुपरसेट)। क्या कार्यात्मक भाषाओं की कोई सुविधा है, सी ++ में नहीं है?सी ++ 0x (सी ++ 11)?

+8

कचरा संग्रह? –

+0

यदि किसी के पास कार्यात्मक भाषाओं की सूची है तो कृपया उन्हें पोस्ट करें –

+2

अधिकांश भाषाएं जिन्हें मैं एक कार्यात्मक सबसेट (यहां तक ​​कि सी) की सुविधा के बारे में जानता हूं - यानी, आप अपने प्रोग्राम लिख सकते हैं ताकि वे कभी भी शुद्ध की तरह राज्य को संशोधित न करें कार्यात्मक भाषा (उदाहरण के लिए, हास्केल), तो आपको और अधिक विशिष्ट होना होगा। – EmeryBerger

उत्तर

15

कार्यात्मक प्रोग्रामिंग प्रतिमान मॉडल गणना गणना के बीच संबंध के रूप में गणना, और इस प्रकार निहित रूप से घोषणात्मक है। हालांकि, व्यावहारिक रूप से, हम अकसर कार्यों को अनिवार्य मानते हैं, यानी आप एक इनपुट मूल्य डालते हैं और एक आउटपुट मान प्राप्त करते हैं, जैसा कि एक प्रक्रिया के साथ होता है। इस दृष्टिकोण से, एक समारोह की विशेषता संपत्ति यह है कि इसका कोई दुष्प्रभाव नहीं है। शर्तों की अस्पष्टता के कारण, हम इस तरह के एक समारोह को शुद्ध कहते हैं, और एक ऐसी भाषा जिसमें केवल शुद्ध कार्य हैं पूरी तरह कार्यात्मक भाषा होगी।

हालांकि, सभी कार्यात्मक भाषाओं शुद्ध कर रहे हैं: एक कार्यात्मक भाषा जो प्रोग्रामर कुशलता से कार्यात्मक प्रतिमान का उपयोग करने की अनुमति देता है वाक्य रचना और शब्दों के साथ एक भाषा है। व्यवहार्यता का उपयोग करने वाली कुछ अवधारणाओं में शामिल हैं - दूसरों के बीच - लैम्ब्डा अभिव्यक्तियों के साथ लैम्ब्डा अभिव्यक्तियां, उच्च-क्रम कार्य, भिन्न प्रकार और पैटर्न मिलान, आलसी मूल्यांकन, प्रकार-अनुमान (स्थाई रूप से टाइप की गई भाषाओं के मामले में)।

यह किसी भी लेखक की सूची नहीं है, और कोई भी भाषा सभी या यहां तक ​​कि उनमें से अधिकांश प्रदान किए बिना कार्यात्मक हो सकती है, लेकिन यदि कोई भाषा करता है - यानी उन्हें प्रमुख हुप्स के माध्यम से कूदने के बिना उपयोग करने योग्य बनाता है - उनकी उपस्थिति एक मजबूत संकेतक है कि भाषा को कार्यात्मक माना जाना चाहिए।

मैं या नहीं, सी ++ 03 + बूस्ट तय करने के लिए बूस्ट के बारे में पर्याप्त जानकारी नहीं है एक व्यवहार्य कार्यात्मक भाषा है, लेकिन C++ 0x निश्चित रूप से बनाता है सी ++अधिक कार्यात्मक, शायद यह भी व्यक्तिपरक सीमा से अधिक धक्का कार्यात्मक भाषाओं के दायरे का।

एक तरफ, वही विचार अन्य प्रोग्रामिंग प्रतिमानों पर लागू होते हैं: सी ++ पूरी तरह ऑब्जेक्ट उन्मुख भाषा नहीं है (वास्तव में, यह बहुत कठिन है - शायद सैद्धांतिक रूप से असंभव - एक ऐसी भाषा को डिजाइन करना जो पूरी तरह से कार्यात्मक और पूरी तरह से दोनों है ऑब्जेक्ट उन्मुख), और आमतौर पर ओओ-भाषाओं (वर्ग, विरासत, encapsulation) के साथ सहयोगी ज्यादातर विशेषताएं वास्तव में किसी भी तरह से अधिकृत नहीं हैं ...

+1

कुछ हद तक संबंधित: http://stackoverflow.com/questions/553536/confused-is-oo- स्वाभाविक-जरूरी या है-है यह बहु प्रतिमान/4861769 # 4861769 – Christoph

5

सी 2 विकी पर Functional Programming Languages परिभाषाओं और चर्चाओं की सूची देखें।

सबसे आम (और कम से कम विवादित सुविधाओं) से कुछ हैं:

  • प्रथम श्रेणी कार्य - function वर्ग प्रथम श्रेणी कार्यों का प्रतिनिधित्व करता है।
  • उच्च आदेश कार्य - फ़ंक्शन ऑब्जेक्ट्स के साथ अनुकरण किया जा सकता है।
  • लेक्सिकल क्लोजर - कक्षाओं के साथ अनुकरण किया जा सकता है।
  • एकल असाइनमेंट - एक सम्मेलन का अधिक। आप सभी चर const घोषित करके ऐसा कर सकते हैं।
  • आलसी मूल्यांकन - TMP
  • कूड़ा संग्रह के साथ प्राप्त किया जा सकता है - अभी भी लापता। एक कार्यात्मक भाषा में बहुत जरूरी है, क्योंकि जीवनकाल और दायरे समान नहीं हैं, जैसा कि @ पास्कल ने उपरोक्त टिप्पणियों में बताया है।
  • टाइप अनुमान - auto
  • टेल कॉल ऑप्टिमाइज़ेशन - एक कार्यात्मक भाषा के लिए कड़ाई से जरूरी नहीं है, लेकिन संकलक सी ++ में निर्भर है।
+1

सी ++ 0x मानक कचरा एकत्रित कार्यान्वयन के लिए अनुमति देता है। – James

+17

यदि आपको बस सब कुछ के बारे में अनुकरण करना है, तो यह एक कार्यात्मक भाषा नहीं है - यह एक अनुकरण कर रहा है। – Chuck

+0

बहुत अधिक सहमत हुए। –