2008-10-09 11 views
22

मुझे वास्तव में लैम्ब्डा अभिव्यक्तियां नहीं मिलती हैं। जबकि वे एएलजीओएल के दिनों से आसपास रहे हैं, मैंने हाल ही में जब तक पाइथन और रुबी बहुत लोकप्रिय हो गए, तब तक मैंने उनके बारे में सुनना शुरू नहीं किया। अब सी # में => वाक्यविन्यास है, मेरी दुनिया में लोग (.NET) अधिक से अधिक lamdba अभिव्यक्तियों के बारे में बात कर रहे हैं।क्या आप लैम्ब्डा अभिव्यक्तियों को समझा सकते हैं?

मैंने लैम्ब्डा कैलकुस पर विकिपीडिया लेख पढ़ा है, लेकिन मैं वास्तव में गणित व्यक्ति नहीं हूं। मैं इसे व्यावहारिक परिप्रेक्ष्य से वास्तव में समझ नहीं पा रहा हूं। मैं लैम्ब्डा अभिव्यक्ति का उपयोग कब करूं? क्यूं कर? मुझे कैसे पता चलेगा कि मुझे यही करना चाहिए?

क्या आप पहले से और बाद के प्रारूप में लैम्ब्डा अभिव्यक्तियों के साथ समस्याओं को हल करने के उदाहरण दिखा सकते हैं? कोई भी अनिवार्य भाषा ठीक है, लेकिन सी # समझने के लिए मेरे लिए सबसे आसान होगा।

+1

डुप्लिकेट http://stackoverflow.com/questions/167343/c-lambda-expression-why-should-i-use- यह http://stackoverflow.com/questions/150129/what-is-a -लैम्ब्डा – jop

+0

धन्यवाद, मैंने उन लिंक को पढ़ा लेकिन उन्होंने मेरे प्रश्न का उत्तर नहीं दिया। मेरा प्रश्न यह है कि यह विशेष तकनीक कैसे उपयोगी है और उस उपयोग के निर्धारण के उदाहरणों के उदाहरण के रूप में थोड़ा और विशिष्ट है। –

उत्तर

21

मूल रूप से जहां तक ​​सी # का संबंध है, लैम्ब्डा अभिव्यक्ति एक प्रतिनिधि (या एक अभिव्यक्ति वृक्ष बनाने के लिए एक आसान तरीका है, लेकिन अब उन्हें एक तरफ छोड़ दें)।

सी # 1 में हम केवल सामान्य तरीकों से प्रतिनिधि उदाहरण बना सकते हैं। सी # 2 में हमने अज्ञात तरीकों को प्राप्त किया। सी # 3 में हमने लैम्ब्डा अभिव्यक्तियां प्राप्त कीं, जो अधिक संक्षिप्त अज्ञात विधियों की तरह हैं।

वे विशेष रूप से संक्षिप्त होते हैं जब आप कुछ तर्क व्यक्त करना चाहते हैं जो एक मान लेता है और एक मूल्य देता है। उदाहरण के लिए, LINQ के संदर्भ में:

     // Only include children - a predicate 
var query = dataSource.Where(person => person.Age < 18) 
         // Transform to sequence of names - a projection 
         .Select(person => person.Name); 

इस की पूरी चर्चा है - my article on closures में - अन्य पहलुओं के साथ।

+0

मैंने यह सवाल देखा और मैंने सोचा, "ओह! शायद मैं जॉन स्कीट को पंच पर हरा सकता हूं!" लेकिन तब मैंने नहीं किया। :) +1 –

+1

वह कोड बहुत अच्छा दिख रहा है, भले ही चयन सही नाम है, तो मैं सोच रहा हूं। यदि आपने मानचित्र का उपयोग किया है, तो आप कोड में संबंधपरक बीजगणित पर पहुंचेंगे। :) – Tetha

+0

मेरे लिए, मानचित्र कुंजी से मूल्य के मानचित्र के निर्माण का सुझाव देता है, जहां आप कुंजी से देख सकते हैं। व्यक्तिगत रूप से मैं प्रोजेक्ट() पसंद करूंगा। –

0

.NET में लैम्बडा एक्सप्रेशन का मेरा मुख्य उपयोग सूचियों के साथ काम करते समय किया गया है। लैम्ब्डा अभिव्यक्ति का उपयोग करके आप एक सूची में एक क्वेरी बना सकते हैं जैसे कि आप डेटाबेस तालिका खोजने के लिए SQL कथन बनाते हैं।

2

लैम्ब्डा फ़ंक्शंस केवल अज्ञात कार्य हैं।

उदाहरण के लिए, पायथन में, आप सूची में सभी तत्वों को दोगुना करना चाहते हैं।

सूची-भाव:

[2*x for x in list] 

स्पष्ट फ़ंक्शन:

def double(x): 
    return 2*x 
map(double, list) # iirc 

lambdas के साथ:

double = lambda x : 2*x 
map(double, list) 

तो, में एक लैम्ब्डा वहाँ ऐसा करने के लिए काफी तीन तरीके हैं अधिकतर भाषाएं एक नया फ़ंक्शन बनाने के सिंटैक्टिक ओवरहेड से बचने का एक तरीका है।

+2

आपकी अंतिम टिप्पणी जरूरी नहीं है। लैम्बडास वैरिएबल पर बंद करने की क्षमता भी प्रदान करता है। –

0

एक लैम्ब्डा अभिव्यक्ति एक कार्यात्मक मान है (उसी अर्थ में 'int' और 'string' मान हैं)। इसका मतलब है कि यह संभव है करने के लिए

  • एक चर है कि एक लैम्ब्डा अभिव्यक्ति रखती परिभाषित एक विधि या समारोह
  • से
  • वापसी एक लैम्ब्डा अभिव्यक्ति एक लैम्ब्डा अभिव्यक्ति भेज (यह एक समारोह को परिभाषित करने के समान है) एक समारोह या विधि

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

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