हास्केल में मानचित्र समारोह के C # समतुल्य क्या है


80

हास्केल में मानचित्र फ़ंक्शन के दो इनपुट पैरामीटर हैं। पहला पैरामीटर एक फ़ंक्शन है और दूसरा पैरामीटर एक सूची है। मानचित्र फ़ंक्शन सूची में सभी तत्वों के इनपुट पैरामीटर के रूप में पारित फ़ंक्शन को लागू करता है और एक नई सूची देता है।

क्या इस कार्यक्षमता के बराबर C # है?


1
आप F # की जाँच कर सकते हैं। यह C # और हास्केल के बीच की खाई को पाटता है।
— चोसपांडियन

3
ज़रुरी नहीं। यह "OCaml for .NET" की तरह अधिक है।
— जंकवे

2
यह उल्लेख नहीं करने के लिए कि सभी एमएल-पारिवारिक भाषाएं (एफ # और हास्केल सहित) यकीनन किसी भी सी-परिवार की भाषा के अलावा एक-दूसरे के साथ अधिक सामान्य हैं; कोई भी जो F # को हैंडल कर सकता है वह शायद हास्केल या ओकेमेल को भी संभाल सकता है।
— सीए मैककैन

1
@jrockway, @camccann: मैं भाषा के वाक्य विन्यास के बारे में बात नहीं कर रहा हूँ। मेरा मतलब है कि F # आपको हमेशा एक शुद्ध कार्यात्मक शैली का उपयोग करने के लिए मजबूर नहीं करता है।
— चोसपंडियन

जवाबों:


94

Select

MSDN संदर्भ

मेरा प्रश्न यहां देखें (केवल अगर आप उत्सुक हैं क्योंकि यह सीधे संबंधित नहीं है)।


8
धन्यवाद ... यह एक सा काउंटर सहज है, मैं सोच रहा था चयन एक संग्रह से पंक्तियों को फ़िल्टर करेगा।
— बी.एम.

8
मैं वास्तव में आशा करता हूं कि आप मेरे प्रश्न की जांच करेंगे।
— चोसपंडियन

1
बीएम: फ़िल्टरिंग कहाँ से आता है।
— एडवर्ड KMETT 15

21

एक और विकल्प के लिए Selectऔर SelectManyअपनी खुद की विस्तार विधि लिखना है।

public static IEnumerable<U> Map<T, U>(this IEnumerable<T> s, Func<T, U> f)
{
  foreach (var item in s)
    yield return f(item);
}

इस स्वीट एक्सटेंशन विधि के लिए धन्यवाद वेस डायर! :) अधिक जानकारी के लिए पोस्ट देखें ।


15

चूंकि Selectऔर SelectManyपहले से ही उल्लेख किया गया था, मैं एक अतिरिक्त प्रश्न का उत्तर दूंगा जो आपने नहीं पूछा: एग्रीगेट केfold रूप में पाया जाता है ।

अब इसे पढ़ने वाला हर कोई पूरी तरह से सुसज्जित होना चाहिए कि वह लड़का हो जो भाषा Y मुहावरों का उपयोग करके भाषा X लिखता है ... इसलिए अपने साथी C # प्रोग्रामरों की खातिर, बहुत दूर न जाएं।


4
अब कैमकैन, आपके टूलबॉक्स में कार्यात्मक रिंच को फेंकने में कुछ भी गलत नहीं है, भले ही आप अनिवार्य रूप से नाखूनों पर हथौड़ा मार रहे हों। आपको कुछ बोल्ट कसने पड़ सकते हैं।
— चोसपंडियन

4
@camccan कार्यात्मक C # वास्तव में बहुत अच्छा है। सिर्फ इसलिए कि भाषा कड़ाई से कार्यात्मक नहीं है इसका मतलब यह नहीं है कि अधिकांश .net प्रोग्रामर बहुत अधिक कार्यात्मक रूप से चीजों के निर्माण से बहुत लाभ नहीं उठा पाएंगे ।

4
कार्यात्मक प्रोग्रामिंग सुविधाओं का उपयोग करना जो C # ऑफ़र एक महान विचार है। कार्यात्मक मुहावरों में सी # को मजबूर करना, जो अच्छी तरह से समर्थन नहीं करता है (कहो, आंशिक रूप से आंशिक अनुप्रयोग के रूप में हास्केल में इतना लोकप्रिय है), दूसरी ओर, शायद आपको सिरदर्द देगा, आपके कोड को बाधित करेगा, और किसी और को परेशान करना होगा जिसे काम करना है इसके साथ।
— CA मैक्कैन

11

और एक सवाल का जवाब देने के लिए जो आपने नहीं पूछा, "अनुक्रम" मोनड को बांधने के बराबर हास्केल को C # में SelectMany कहा जाता है। इस विवरण के लिए वेस डायर का शानदार लेख देखें:

http://blogs.msdn.com/wesdyer/archive/2008/01/11/the-marvels-of-mond.nx



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