10

मैं कुछ सालों से कोडिंग कर रहा हूं, कुछ भी जटिल नहीं है। सी ++ वह है जिसे मैं सबसे अच्छा जानता हूं। मैंने हाल ही में पॉल ग्राहम की साइट पर डूबने, डरावनी कोडिंग, और अब यहां ठोकर खाई।मैं कार्यात्मक प्रोग्रामिंग के "तरीकों से खुद को प्रबुद्ध" करने के लिए क्या सीखूं?

मैं कार्यात्मक प्रोग्रामिंग के "तरीकों से खुद को प्रबुद्ध" करने के लिए क्या सीखूं? हास्केल, योजना या CLISp?

+0

आपके पास स्कैला भी है, जिसमें कुछ गति है: http://www.scala-lang.org/। साथ ही, सी ++ पृष्ठभूमि से आते हुए, आप डी में कुछ रोचक एफपी संरचनाएं पा सकते हैं: डी में जब भी आप समझते हैं तो आप (शुद्ध) एफपी का उपयोग करते हैं। –

+0

जबकि हम वीएम में हैं, एफ # स्केल के .NET के समकक्ष है। – Kos

उत्तर

5

तीन में से, मैं कहूंगा कि यह योजना सबसे सरल समग्र है, अगर यह आपकी मुख्य चिंता है। SICP योजना का उपयोग करता है, और यह कार्यात्मक तरीके से प्रोग्राम सीखने के लिए स्वयं एक महान संसाधन है।

हालांकि, आम लिस्प में कई उन्नत विशेषताएं हैं जो इसे शक्तिशाली अभिव्यक्ति हैंडलिंग (अपवादों से अधिक शक्तिशाली), multimethods और aspect oriented programming के लिए समर्थन प्रदान करती हैं।

आप एक के साथ शुरू कर सकते हैं, लेकिन अंत में, आपको कई भाषाओं का अध्ययन करना चाहिए।

+5

आम लिस्प में वास्तव में बहुत सी अच्छी सुविधाएं हैं, लेकिन उनमें से अधिकतर कार्यात्मक प्रोग्रामिंग से संबंधित नहीं हैं। – Chuck

+0

@Chuck: बहुत सच है। यही कारण है कि मैं शुरू करने के लिए आम लिस्प पर योजना की सिफारिश करता हूं। मैं सिर्फ इतना प्रशंसक हूं कि मैं मदद नहीं कर सकता लेकिन कुछ का जिक्र कर सकता हूं। विवांट एनसीआईटीएस/जे 13। – outis

+0

योजना बहुत बढ़िया है जब आप समझना चाहते हैं कि दृश्यमान भाषा दृश्यों के पीछे कैसे काम करती है। –

5

सभी तीन अच्छे हैं, प्रत्येक व्यक्ति पर निर्भर करता है।

आप Haskell पर निर्णय लेते हैं, यह एक महान ressource है: learnyouahaskell और भी real world haskell

4

अन्य उत्तर के रूप में कहते हैं, सभी तीन अच्छे हैं।

लेकिन यदि आप लिस्प पर निर्णय लेते हैं, तो मैं सुझाव दूंगा कि आप Clojure के लिए जाएं जो शायद इसका सबसे हालिया पुनर्जन्म है।

+2

क्लोजर बहुत अच्छा है यदि आप ओओ लिस्प चाहते हैं, लेकिन यदि आप कार्यात्मक प्रोग्रामिंग सीखना चाहते हैं तो यह एक खराब विकल्प है। यह पूंछ-कॉल उन्मूलन भी नहीं करता है! – Porculus

+2

@ पर्कुलस: क्लोजर जावा के साथ एकीकृत करने में परेशानी के लिए पूंछ-कॉल उन्मूलन नहीं करता है, लेकिन यह 'रिकूर' ऑपरेटर के साथ रिकर्सिव समाधान की अनुमति देता है। जो मुझे इसके बारे में पता है, वह अभी भी आम लिस्प की तुलना में अधिक दृढ़ता से कार्यात्मक प्रतीत होता है। – Chuck

+1

क्लोजर किसी भी अन्य लिस्प की तुलना में अधिक कार्यात्मक है जिसे मैं जानता हूं - यह शैली में हास्केल के बहुत करीब है। आलसी अनुक्रम, अपरिवर्तनीय डेटा संरचनाएं, कड़ाई से नियंत्रित उत्परिवर्तन, ओओपी निराश इत्यादि ..... टीसीओ के लिए - यह 'रिकर' के साथ 99% मामलों के लिए करता है और अन्य 1% के लिए वैकल्पिक अच्छे समाधान प्रदान करता है। क्लोजर का उपयोग करने के तीन वर्षों में मुझे कभी भी टीसीओ के साथ कोई समस्या नहीं हुई ..... – mikera

18

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

संयोग से, मैं हास्केल जैसे अधिक दृढ़ कार्यात्मक भाषाओं को प्रोत्साहित करने का कारण यह है क्योंकि "सीखने के कार्यात्मक प्रोग्रामिंग" का एक बड़ा हिस्सा सीख रहा है कि कैसे अपने कार्यक्रम को अलग तरीके से सोचें। यदि आपकी भाषा अनिवार्य रूप से लिखना स्वाभाविक लगती है, तो सोचने के तरीके में गिरना बहुत आसान है और कभी नहीं पता कि ऐसा करने का एक अलग तरीका है।

+0

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

4

'कार्यात्मक प्रोग्रामिंग के तरीकों के साथ खुद को प्रबुद्ध' करें?

हास्केल के कार्यात्मक शैली के सबसे मजबूत आदर्श, विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग (कोई साइड इफेक्ट), मजबूत स्थिर टाइपिंग बल है, और मल्टीकोर समानांतरवाद पर जोर देने के साथ एक व्यावहारिक कार्यान्वयन, साथ भी एक बहुत बड़ा समुदाय (करते हुए 2000 के आसपास http://hackage.haskell.org पर उपलब्ध पुस्तकालय, और कई ऑनलाइन संसाधन)।

यह प्रोग्रामिंग के बारे में सोचने के तरीके के बारे में कुछ हद तक प्रसिद्ध है।

लेकिन यह वकालत है, और उपयोगी स्टैक ओवरफ्लो प्रश्न और उत्तर सत्र नहीं है। आपको अपने लिए यह तय करना होगा कि आप क्या सीखना चाहते हैं।

3

क्या आपने एफ #, एमएल या ओकैमल के बारे में सुना है? ये तीन भाषाएं एमएल परिवार से संबंधित हैं।

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

यहां एक उदाहरण है जिसे मैंने Project Euler #2 के लिए लिखा था। जब मैंने पहली बार ऐसा किया, तो मैंने अनिवार्य शैली का उपयोग किया। बाद में, मुझे पता है कि आलसी अनुक्रम का उपयोग कैसे करें, जो एक शक्तिशाली कार्यात्मक प्रोग्रामिंग अवधारणा है।

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

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