अनाम लैम्ब्डा फ़ंक्शन (कार्यात्मक प्रोग्रामिंग)


10

अनाम (लैम्ब्डा) फ़ंक्शन क्या हैं? एक कार्यात्मक प्रोग्रामिंग भाषा में एक अनाम फ़ंक्शन की औपचारिक परिभाषा क्या है?

अपने सरल शब्दों में, जब मैं स्कीम / लिस्प में प्रोग्रामिंग कर रहा हूं तो मैं कहूंगा कि एक अनाम (लंबो) फ़ंक्शन एक फ़ंक्शन है जो एक पहचानकर्ता के लिए बाध्य नहीं है।

क्या यह सब आप औपचारिक रूप से लंबोदर समारोह के बारे में कह सकते हैं? मुझे लगता है कि इस सरल परिभाषा में और अधिक विवरण जोड़ा जा सकता है। कृपया विस्तृत करें, और धन्यवाद!


जवाबों:


10

मेरी राय में, यह सब आप वास्तव में उनके बारे में कह सकते हैं।

विचार यह है कि उच्च-क्रम वाली भाषा में, एक फ़ंक्शन केवल एक अन्य प्रकार का मूल्य है। उसी तरह जब आप C में एक पहचानकर्ता के बिना (3 + 4) हो सकते हैं, तो आपके पास स्कीम में पहचानकर्ता के बिना (लैम्ब्डा (x) + (3 x)) हो सकता है।

यहाँ कुंजी यह नहीं है कि अनाम कार्यों के बारे में कुछ विशेष है। यह केवल अन्य भाषाओं का प्रतिबंध है जिनके लिए कार्यों की आवश्यकता होती है उन्हें किसी अन्य मूल्य से अलग तरीके से व्यवहार किया जाता है। विशेष परिभाषाएँ प्रक्रियात्मक भाषाओं के लिए हैं जो उन्हें अनुमति नहीं देतीं, कार्यात्मक भाषाओं के लिए नहीं।


11

लैम्ब्डा कैलकुलस में, सभी फ़ंक्शन (शब्द) अनाम हैं। यह लैम्ब्डा कैलकुलस की एक आवश्यक संपत्ति है: आप सरल कार्यों से जटिल कार्यों की रचना कर सकते हैं, उन्हें नाम दिए बिना।

प्रोग्रामिंग भाषाओं में, अधिकांश मामलों में फ़ंक्शन को नाम देना वांछनीय है, क्योंकि यह वह तरीका है जो हम सोचते हैं और यह मनुष्यों के लिए कोड को पठनीय बनाता है। लेकिन संकलन आखिरकार एक निष्पादन योग्य (यदि हम डिबगिंग जानकारी की उपेक्षा करते हैं) का उत्पादन करते समय नाम हटा देते हैं।

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


1

यह इस बात पर निर्भर करता है कि आप अपने प्रश्न के किस हिस्से पर जोर देते हैं। यदि यह विशेष रूप से अनाम कार्यों के लिए बेनामी होने की संपत्ति है, तो वास्तव में एकमात्र उत्तर यह है कि वे अनबाउंड मान हैं । यदि आप सामान्य रूप से कार्यों के बारे में बात कर रहे हैं, तो अनाम फ़ंक्शंस संभवतः एक कार्यात्मक सेटिंग में लैम्ब्डा कैलकुलस के उपयोग की सबसे अधिक प्रकट अभिव्यक्ति हैं, जो कि आवेदक भाषाओं के लिए है

वास्तव में, लैम्ब्डा कैलकुलस दृष्टिकोण से, लैम्ब्डा अभिव्यक्तियाँ बाइंडिंग बनाने के लिए उपयोग किए जाने वाले बहुत ही वाक्यात्मक निर्माण हैं। लैम्ब्डा कैलकुलस में प्रयुक्त संकेतन को याद करें:

λf.λx.fx

fxfx

एक भाषा आम तौर पर let(जैसे कि भाषाओं, योजना) define( या योजना) जैसे शीर्ष स्तर पर उपयोग योग्य बाइंडिंग बनाने के लिए (या सिंथैटिक कंस्ट्रक्शन के भीतर फ़ंक्शन, जैसे मॉड्यूल या ऑब्जेक्ट्स से अधिक जटिल) बनाने के लिए तरीके प्रदान करती है, लेकिन इसके लिए एकमात्र आवश्यक उपकरण बाइंडिंग निचले स्तरों पर लंबोदर है।

यदि आप स्कीम या लिस्प बोलियों जैसी भाषाओं को देखते हैं, तो उनका बहुत फ़ंड लैम्बडा कैलकुलस है, और कई विशेष रूप वास्तव में चीनी लेपित लैम्ब्डा हैं।

के लिए concatenative भाषाओं , कहानी थोड़ी अलग है। लैम्ब्डा आवश्यक नहीं है, और वास्तव में काउंटर-उत्पादक हैं। अनाम लैम्ब्डा को परिभाषित करने का क्या मतलब है, जब सब कुछ एक फ़ंक्शन है ?

इन दोनों तरह के आमों के बीच किसी तरह का द्वंद्व है। बाद में बिंदु मुक्त फ़ंक्शन संयोजन पर ध्यान केंद्रित किया गया है और इस प्रकार यह सब कुछ कार्यों के रूप में प्रतिनिधित्व करने की कोशिश करता है, जबकि पूर्व अधिक विस्तृत गणना पर काम करता है, और भाषा के किसी भी अन्य मूल्यों की तरह, प्रथम श्रेणी के मूल्यों के रूप में कार्य करने का प्रयास करता है। इस संबंध में, मेमने को उस प्रयास के परिणाम के रूप में देखा जा सकता है।

इस उत्तर में प्रस्तुत (खराब) विषय पर कुछ संकेत:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.