एक अच्छा पहला कार्यात्मक प्रोग्रामिंग प्रोजेक्ट क्या होगा? [बन्द है]


19

एक अच्छा पहला कार्यात्मक प्रोग्रामिंग प्रोजेक्ट क्या होगा?

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

समस्या यह है कि मैं गर्मियों की छुट्टी का लाभ उठाने और कार्यात्मक प्रोग्रामिंग पर बेहतर समझ पाने के लिए, और एक भाषा से परिचित होना चाहता हूं।

आप क्या कहेंगे कि यह एक अच्छा अभ्यास प्रोजेक्ट होगा जो थोड़ा चुनौतीपूर्ण है, लेकिन मुझे भाषा, प्रतिमान आदि सीखने की भी अनुमति देता है और फिर आपको क्या लगता है कि यह मेरी स्नातक परियोजना के लिए एक अच्छी परियोजना (अधिक उन्नत) होगी?

कार्यात्मक प्रोग्रामिंग में जाने के साथ सबसे अच्छी भाषा के लिए सुझाव भी सराहना की जाएगी।


1
"मुझे किस भाषा का चयन करना चाहिए" और परियोजना चयन प्रश्न दोनों ही ऑफ-टॉपिक हैं। कृपया अधिक जानकारी के लिए FAQ और इस मेटा चर्चा को देखें।
एडम लेअर

जवाबों:


10

यह आम तौर पर आसान है अगर आप कुछ गणितीय या तार्किक के लिए जाते हैं - कार्यात्मक प्रोग्रामिंग भाषाएं आमतौर पर उन अनुप्रयोगों के लिए उपयुक्त होती हैं जो किसी दिए गए इनपुट से आउटपुट में परिवर्तन के कुछ रूप का प्रतिनिधित्व करते हैं।

कठिनाई के मोटे क्रम में कुछ विचार:

  • जेनेटिक एल्गोरिदम - एक प्रोग्राम लिखते हैं जो एक विशेष कार्य के लिए समाधान विकसित करता है जहां समाधान एक साधारण डीएसएल में दर्शाए जाते हैं। मैंने थोड़ी सी बॉट्स बनाने से पहले मज़ा लिया है जो 2 डी ग्रिड में भोजन के लिए शिकार करती हैं और विभिन्न प्रकार की रणनीतियों को विकसित करती हैं

  • पार्सिंग कॉम्बिनेटर - एक पार्सर कॉम्बीनेटर लाइब्रेरी का निर्माण करें जो आपको उच्चतर ऑर्डर फ़ंक्शंस का उपयोग करके एक मनमानी भाषा के लिए एक पार्सर का निर्माण करने में सक्षम बनाता है।

  • यदि आप वास्तव में एक चुनौती चाहते हैं, तो आप एक कंप्यूटर गेम लिखने की कोशिश कर सकते हैं ... ध्यान रखें कि यह एक मुश्किल काम है क्योंकि गेम में बहुत अधिक परिवर्तनशील स्थिति होती है जो एक कार्यात्मक प्रोग्रामिंग शैली में प्रबंधित करने के लिए मुश्किल हो सकती है। आप जितना चाहते थे उससे अधिक जानने के लिए साधुओं आदि के बारे में जानना चाहते थे ....।

मैं एक व्यावहारिक कार्यात्मक भाषा के रूप में क्लोजर की सिफारिश करता हूं। मैं अब लगभग 18 महीने से इसका उपयोग कर रहा हूं और मैं इस चुनाव से बेहद खुश हूं। मुख्य कारण हैं:

  • Concurrency - क्लोजर में एक अद्भुत एसटीएम सिस्टम है जो मेरे विचार में मल्टी-कोर फॉर्मेटिबिलिटी के लिए इसे दुनिया की सबसे अच्छी भाषा बनाता है। वीडियो यहाँ देखें: http://www.infoq.com/pretations/Value-Identity-State-Rich-Hickey अगर आप समझना चाहते हैं कि यह इतना खास क्यों है
  • यह एक लिस्प है - इसलिए "कोड डेटा है" दर्शन के कारण यह मैक्रो-आधारित मेटाप्रोग्रामिंग (प्रोग्राम लिखने वाले, आनुवंशिक एल्गोरिदम आदि) के लिए शानदार है।
  • व्यावहारिक कार्यात्मक प्रोग्रामिंग - क्लोजर शैली बहुत कार्यात्मक है (उच्च आदेश कार्यों, आलसी दृश्यों आदि पर बहुत जोर दिया गया है) लेकिन यह हास्केल की तरह पूरी तरह से शुद्ध नहीं है। Mtable राज्य और पक्ष efects को संभालने के लिए बहुत सारे अच्छे उपकरण हैं
  • डायनेमिक - क्लोजर डिफ़ॉल्ट रूप से एक डायनेमिक भाषा है। मुझे उत्पादकता के लिए यह बड़ा बढ़ावा लगता है। हालाँकि, यदि आप स्थैतिक टाइपिंग के प्रदर्शन लाभ चाहते हैं, तो आप वैकल्पिक रूप से बाद में स्थैतिक प्रकार के संकेत जोड़ सकते हैं।
  • पूरी तरह से संकलित - क्लोजर कोड हमेशा संकलित किया जाता है (भले ही आप "निष्कासन" करते हों) इसलिए आपको बहुत अच्छा प्रदर्शन मिलता है - निश्चित रूप से मेरे द्वारा उपयोग की जाने वाली अधिकांश गतिशील भाषाओं की तुलना में बेहतर है।
  • आपको JVM पारिस्थितिकी तंत्र में सभी पुस्तकालयों और उपकरणों तक मुफ्त में पहुंच मिलती है । अत: शैक्षणिक भाषाओं के विपरीत जिनमें बहुत सीमित पुस्तकालय उपलब्ध हैं, आप जावा ब्रह्मांड में कुछ भी आसानी से प्राप्त कर सकते हैं

आप बहुत आसानी से मूल बातें आज़मा सकते हैं:

  • 4Clojure ऑनलाइन समस्या सेट - जल्दी समस्याओं के लिए एक अच्छा के रूप में सेवा Clojure भाषा का परिचय "करके सीखने"
  • ऑनलाइन क्लोजर REPL http://www.try-clojure.org/ पर

मैंने आपके उत्तर को प्रश्न के लिए चुना क्योंकि यह मेरे सभी प्रश्नों का उत्तर देता है। समय निकालने के लिए बहुत-बहुत धन्यवाद।
मेमे

हास्केल के पास भी एसटीएम है; (
वैकल्पिक

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

@ जियोर्जियो: एबीसीएल ऐसा लगता है कि जेवीएम पर कॉमन लिस्प का एक अच्छा कार्यान्वयन है। ओटोह क्लोजर को जेवीएम के लिए डिज़ाइन किए जाने के फायदे हैं, जिसमें बहुत अधिक "आधुनिक" नवाचार शामिल हैं, और अधिक सामुदायिक गति है। मुझे लगता है कि यह वास्तव में नीचे आता है कि क्या आप कॉमन लिस्प बैकवर्ड संगतता बनाए रखने के बारे में परवाह करते हैं या नहीं।
मिकेरा

9

इससे पहले कि आप विशिष्ट परियोजनाओं के बारे में सोचना शुरू करें, कार्यात्मक प्रोग्रामिंग की मूल बातें सीखना शुरू करें ताकि आप उन परियोजनाओं के प्रकारों के बारे में अच्छे से जान सकें जो एक अच्छी तरह से फिट होंगी।

आरंभ करने के लिए सबसे अच्छी जगह संभवतः कंप्यूटर प्रोग्राम (एसआईसीपी) की संरचना और व्याख्या है , जो लिस्प की योजना बोली पर आधारित है। यह एक क्लासिक सीएस पाठ है, और पूरा पाठ ऑनलाइन उपलब्ध है (लिंक प्रदान किया गया है)।

यदि आप फैंसी प्राप्त करना चाहते हैं, और एक अधिक आधुनिक कार्यात्मक भाषा का उपयोग करते हैं जो जेवीएम को लक्षित करता है, तो क्लीजुर पर एक नज़र डालें। यहां तक ​​कि SICP का एक अनुकूलित संस्करण भी है, विशेष रूप से क्लोजर के लिए

SICP टेक्स्ट पर जाने से, आपको यह पता चल जाएगा कि कार्यात्मक प्रोग्रामिंग कुछ प्रकार के कार्यों के लिए कितनी अच्छी तरह से अनुकूल है, और अभ्यास एक पूर्ण परियोजना को प्रेरित कर सकता है। यदि आप क्लोजर मार्ग पर जाना चुनते हैं, और कुछ मौजूदा परियोजनाओं की जांच करना चाहते हैं, तो यहां कुछ अच्छे लिंक हैं


पुस्तक के लिए लिंक प्रदान करने के लिए धन्यवाद। बेहतर समझ पाने के लिए मैं पढ़ने जा रहा हूं।
मेमे

क्या आपने आज अपना SICP पढ़ा है?
MattyD

3

मात्रात्मक विश्लेषण

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

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


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

1
मैं यह नहीं कहूंगा कि मेरे अनुभव में मात्रात्मक विश्लेषण श्रृंखला के बारे में एल्गोरिदम चलाने के बारे में है। मैंने C # में क्वांट सामान लागू किया है और इसे LINQ के साथ बहुत कम से कम जोड़ा गया है, कम से कम पोर्टफोलियो थ्योरी तरह के सामान के लिए
Homde

एल्गोरिदम के कार्यान्वयन के बारे में क्या है?
मात्रा_देव

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

मूल्य निर्धारण मॉडल अंशांकन के बारे में क्या?
मात्रा_देव २ quant

3

सिर शुरू करने के लिए, आप F # में थोड़ा लाठी खेल लागू करने का प्रयास कर सकते हैं। यह इस लघु वीडियो ट्यूटोरियल के दौरान सौंपी गई एक होमवर्क परियोजना है । नेट पर (और एक वीडियो में) समाधान भी दिया गया है।


2

आप योजना के लिए दुभाषिया लिख ​​सकते हैं या OCaml के साथ लिस्प कर सकते हैं।


यह भी नोट करने के लिए भी haskell में लेखन योजना के बारे में इस पर एक haskell पुस्तक है।
वैकल्पिक

2

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


मैं एफ # ईमानदारी से मुख्य रूप से सोच रहा था क्योंकि डेनमार्क में माइक्रोसॉफ्ट सब कुछ लोकप्रिय है, लेकिन जितना अधिक मैं अलग-अलग राय पढ़ता हूं, मैं इस फैसले पर संदेह कर रहा हूं। मैं एक ऐसी भाषा चाहता हूं जो मुझे मुख्य रूप से प्रतिमान सीखने में मदद करे, और मुझे यकीन है कि अगर मुझे ज़रूरत है या करना है तो मुझे एक और सीखना मुश्किल नहीं है।
मेमे

दृढ़ता से इस बात पर निर्भर करता है कि आप कहां हैं और आप क्या करते हैं। हमारे लिए Microsoft प्रोग्रामिंग प्रौद्योगिकियां बेकार हैं क्योंकि वे हमारे मुख्य मंच का समर्थन नहीं करते हैं। लेकिन मैं बताता हूं: यदि आप F # का उपयोग करना चाहते हैं, तो बढ़िया, लेकिन फिर एक नया F # विशिष्ट प्रश्न खोलें।

मैं उस का उपयोग नहीं करना चाहता। मैंने अभी तक निर्णय नहीं लिया है। वैसे भी भाषा का उपयोग करने के बारे में सवाल एक माध्यमिक था।
मेमे

उस मामले में, एक परियोजना ढूंढें और फिर सिफारिशों को पूछें कि इसे कैसे हल किया जाए। उदाहरण के लिए प्रोलॉग निर्णय पेड़ खोज के लिए महान है। हास्केल पैटर्न मिलान के लिए बहुत अच्छा है। लिस्प आपके डेटा के आधार पर रनटाइम पर लिस्प कार्यक्रमों के निर्माण और हेरफेर के लिए बहुत अच्छा है।

0

आप कुछ ओपन सोर्स प्रोजेक्ट में भी योगदान दे सकते हैं।

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

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