2008-11-01 13 views
12

मैं हाल ही में प्रोग्रामिंग के बारे में अपनी सोच को विस्तृत करने के लिए, केवल कार्यात्मक प्रोग्रामिंग के साथ शोध और खेल रहा हूं, क्योंकि मुझे "कार्यात्मक रूप से" मुश्किल लगता है।कार्यात्मक प्रोग्रामिंग: सर्वश्रेष्ठ प्लेटफ़ॉर्म/पर्यावरण

मैंने ग्लासगो हास्केल डाउनलोड किया है और इसके साथ प्रयोग किया है।

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

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

+0

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

उत्तर

11

यदि आप वास्तव में सीखना चाहते हैं कि कैसे कार्यात्मक तरीके से सोचना है, तो हास्केल निश्चित रूप से सही विकल्प है। बस वहां की हर दूसरी भाषा के बारे में आप एक अनिवार्य शैली में बहुत आसानी से फिसल सकते हैं। हास्केल आपको एक कार्यात्मक मानसिकता में मजबूर करेगा। सीखने के दौरान मुझे यह अनिवार्य पाया गया। (निश्चित रूप से, मैं निश्चित रूप से अधिक अनुशासित हो सकता हूं, लेकिन आपकी किस्मत क्यों धक्का दे?)

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

3

Scala पर देखें। यह जेवीएम को लक्षित करता है, जावा के साथ इंटरऑपरेट करता है, और इसमें कई कलात्मक प्रोग्रामिंग फीचर्स हैं।

+0

किवी, आपके ईडीआईटी के जवाब में, मैं एक अनिवार्य शैली में फिसलने के खतरे के बारे में मैथियस बेनकार्ड की टिप्पणियों से सहमत हूं। यदि आप चुनौतीपूर्ण होना चाहते हैं, तो हास्केल एक बहुत अच्छी पसंद है। –

7

मैं PLT Scheme और SICP की अनुशंसा करता हूं। भाषा इतनी सरल है कि आप महत्वपूर्ण अवधारणाओं को बहुत जल्दी प्राप्त कर सकते हैं।

12

F# देखें। सीएलआर में एक निर्देश है ताकि आप पूंछ कॉल के साथ एफ # कोड लिख सकें जो स्टैक ओवरफ्लो (अपवाद, वेबसाइट नहीं) का कारण बनता है। Here पीडीसी से एफ # के बारे में एक परिचय वीडियो है।

3

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

0

ने कभी भी प्रोलॉग की कोशिश की? ... कि हूँ

?- bend(your_mind). 
Yes 


?- bend(X). 
X = your_mind 

यह मुझे एक नया परिप्रेक्ष्य वैसे भी ... plentyinfooutthere

+0

यह कार्यात्मक प्रोग्रामिंग नहीं है, मुझे नहीं लगता। – Claudiu

+0

प्रोलॉग एक तर्कसंगत प्रोग्रामिंग भाषा है, लेकिन एक कार्यात्मक भाषा से संबंधित नहीं है। –

5

इसके अलावा Clojure देखो दे दी है।

+0

धन्यवाद; यद्यपि लिस्प उन भाषाओं में से एक है जिसका मूल रूप किसी कारण से मुझ पर निर्भर करता है। –

+0

किवी: मैं वैसे ही सोचता था, लेकिन वास्तव में आम लिस्प को गंभीर प्रयास करने के बाद, मैंने वापस देखा और सोचा, "मैंने पहले ऐसा क्यों नहीं किया?" मैं एक भाषा के रूप में लिस्प की सिफारिश नहीं करता एफपी सीखने के लिए, हालांकि (मेरा जवाब देखें)। लिस्प की योग्यता कहीं और झूठ बोलती है। –

5

दूसरे शब्दों में, क्या हास्केल स्कैला की तुलना में मेरी पूर्वकल्पनाओं को कठिन और तेज चुनौती देगा?

हां।

यदि आप वास्तव में सीखना चाहते हैं, तो अपने आराम क्षेत्र से बाहर निकलें।

क्या आप वास्तव में अगले 3 महीनों में उत्पादन कोड के लिए स्कैला का उपयोग करने जा रहे हैं, वैसे भी?

6

कोई रास्ता नहीं है कि स्काला आपके दिमाग को कहीं भी उतना ही घुमाएगा जितना हैस्केल होगा। एफपी सीखते समय हास्केल पर स्कैला चुनने का मुख्य कारण है कि आप मोनाड्स, मज़दूरों और उच्च-आदेश की भलाई के खतरनाक जंगलों के लिए एक और अधिक सभ्य परिचय दें। स्कैला बहुत बढ़िया है यदि आप ऑब्जेक्ट उन्मुख पृष्ठभूमि से आ रहे हैं जो उस ज्ञान को कार्यात्मक-भूमि में परिवर्तित करने की कोशिश कर रहा है। यह बहुत अच्छा नहीं है अगर आप केवल गहरे छोर में सिर-गोता लगाने के लिए चाहते हैं।

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

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

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