2010-08-07 10 views
15

शीर्षक में सामान्य प्रश्न इसके अलावा,कार्यात्मक प्रोग्रामिंग सिमुलेशन पर कैसे लागू होता है?

  • कैसे कार्यात्मक प्रोग्रामर और कार्यात्मक भाषाओं सिमुलेशन, जो स्वाभाविक रूप से सबसे ऑब्जेक्ट-उन्मुख भाषाओँ द्वारा नियंत्रित किया जा करने लगते हैं के डोमेन से संपर्क करते हैं?
  • क्या (ज्यादातर) कार्यात्मक शैली में लिखे जटिल सिमुलेशन के खुले स्रोत उदाहरण हैं?
  • एक कार्यात्मक प्रतिमान से सिमुलेशन तक पहुंचने के लिए, ओओ-प्रोग्रामर की परिप्रेक्ष्य में क्या परिवर्तन होगा?

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

शायद अनुभवी कार्यात्मक प्रोग्रामर विशेष पृष्ठभूमि और विशेष रूप से अनुकरण के लिए किसी की सोच को फिर से उन्मुख करने के तरीके पर अतिरिक्त पृष्ठभूमि और सलाह प्रदान कर सकते हैं। अग्रिम में धन्यवाद!

+0

धन्यवाद, अब तक आपके सहायक प्रतिक्रियाओं के लिए। ऐसा लगता है कि ओओ-पैराडिग्म सिमुलेशन से कार्यात्मक-प्रतिमान सिमुलेशन में संक्रमण के लिए अभी तक एक "कैननिकल" संदर्भ नहीं है, लेकिन साझा किए गए सभी लिंक और कोड के माध्यम से पढ़ने में, शायद मुझे इसे लिखने का खतरा होगा। :) – limist

+1

मैंने कुछ साल पहले इसी तरह के प्रश्न पूछा, और मैं नीचे एक लिंक भी शामिल कर रहा हूं क्योंकि कुछ अच्छे उत्तर हैं, और इस विषय में रूचि रखने वाले अन्य लोगों के लिए सहायक हो सकते हैं। http://stackoverflow.com/questions/718935/is-a- कार्यात्मक- भाषा-a-good-choice-for-a-flight-simulator-how-about-lisp –

+0

@ बल्लापार्क - लिंक के लिए धन्यवाद, मेरे पास था पहले अपने प्रश्न को देखा और उससे भी सीखा। – limist

उत्तर

4

मुझे यकीन नहीं है कि मैं इस प्रश्न में उत्पन्न समस्या का व्यापक विश्लेषण लिखने की चुनौती पर हूं, लेकिन मैं कम से कम कुछ लिंक एफपी बनाम गेम्स फ्रंट पर दिलचस्प पोस्ट कर सकता हूं:

जोर्ग डब्ल्यू मिट्टाग this answer में "असली दुनिया" हास्केल प्रोग्रामिंग (कुछ रोचक लेखन-अप के लिंक के साथ - Purely Functional Retrogames श्रृंखला के साथ-साथ पढ़ने के लायक है) पर एक प्रश्न के लिए कई रोचक उदाहरण प्रदान करता है।

क्लोजर भूमि में, फिल हैगेलबर्ग ने क्लोजर प्रोग्रामिंग पर अपने PeepCode स्क्रीनकास्ट के लिए एक टेक्स्ट-आधारित साहसिक गेम लागू किया है; कोड on GitHub उपलब्ध है। फिर ब्रायन कार्पर का RPG project है; कोई कोड सार्वजनिक रूप से अभी तक जारी नहीं हुआ है और केवल एक पोस्ट पहले से ही एक पोस्ट (यह बहुत अच्छा लग रहा था, हालांकि, चलो सभी ब्रायन को जारी रखने के लिए दबाव डालें ;-))। अंत में, here पेनम्बरा का उपयोग करके एक साधारण गेम का एक उदाहरण है (किसी कारण से - संभवतः क्लोजर से असंबंधित - मैं इसे काम नहीं कर सका, लेकिन आप कर सकते हैं, साथ ही साथ एक लिखित अप संलग्न है)।

सिमुलेशन के लिए, ants.clj का अध्ययन करना एक अच्छा विचार है। साथ ही, मुझे यूसी बर्कले (मुझे लगता है ...?) में कहीं भी उपलब्ध एक प्रारंभिक प्रोग्रामिंग कोर्स से एसआईसीपी आधारित व्याख्यान की एक श्रृंखला को देखना याद है (9 0% यह उनके यूट्यूब चैनल पर था); उन्हें योजना में ओओपी पर तीन व्याख्यान मिले हैं और मुझे लगता है कि वे दृष्टिकोण के लिए अच्छे उपयोग के मामले प्रदान करने वाले डोमेन के रूप में सिमुलेशन का उल्लेख करते हैं। ध्यान दें कि मेरे पास इस की एक बहुत अस्पष्ट स्मृति है, इसलिए मेरे लिए यह कहना मुश्किल है कि यह आपके लिए कितना उपयोगी हो सकता है।

+0

उत्कृष्ट जवाब! मूर हालांकि पढ़ने के लिए मजेदार था, और पीपकोड कास्ट चीजों की समीक्षा करने का एक अच्छा तरीका था (मैंने इसे बहुत अच्छा देर से देखा, हां, अच्छा परिचय मूल्य प्राप्त करने के लिए)। इसके अलावा, ब्रायन अभी भी आरपीजी पर काम कर रहा है। उत्तेजित होना। – Isaac

+0

Michal, उपयोगी लिंक और जानकारी के लिए धन्यवाद। पुन। एसआईसीपी आधारित ओओपी व्याख्यान, शायद आप व्याख्यान 16-18 यहाँ मतलब है? http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001- संरचना-and-interpretation-of-computer-programs-spring-2005/lecture-notes/ – limist

+0

@limist: नहीं, मेरा मतलब यूसी बर्कले से एसआईसीपी पाठ्यक्रम से 17-19 व्याख्यान था - बस लिंक को फिर से खोज लिया: http://www.youtube.com/ucberkeley#g/c/6879A8466C44A5D5 @Isaac Hodes: धन्यवाद! इसके अलावा, यह जानना अच्छा है कि ब्रायन अभी भी इस पर है। और लिंक के अपने स्वयं के शांत संग्रह के लिए धन्यवाद। :-) –

5

माइकल का जवाब उत्कृष्ट है, लेकिन मैंने सोचा कि मैं कुछ अन्य स्वच्छ उदाहरण जोड़ूंगा जिन्हें मैंने व्यक्तिगत रूप से उपयोगी/रोचक पाया है।

पहला लॉन्ग जेन्सन द्वारा functional fluid dynamics पर एक पोस्ट (और कोड) है। हालांकि वह निश्चित रूप से यहां गति के लिए उत्परिवर्तनीय मार्ग चलाता है, शैली बल्कि कार्यात्मक है। मैं क्लोजर 1.3 द्वारा शर्त लगाता हूं यह उचित प्रदर्शन के साथ अपरिवर्तनीय रूप से किया जा सकता है (ज्यादातर!)।

अगला क्लोजर में लागू simple Snake game है। एक घंटे या उससे भी कम समय में पढ़ने के लिए काफी आसान है, और शैली वास्तव में सुखद और मिलनसार है।

इसके अलावा, कुछ साफ कोड देखने के लिए (मुझे लगता है!) कोड मॉडलिंग तंत्रिका नेटवर्क है। जेफ फोस्टर में single layer परसेप्ट्रॉन कोड है, और कुछ और idiomatic revisions of the code हैं। यदि आप एनएन से परिचित नहीं हैं, भले ही आप देख रहे हैं। तरल गतिशीलता के संबंध में उनके पास कुछ और हालिया पोस्ट भी हैं, हालांकि इस बार हास्केल में। (Part I और Part II) मुझे लगता है कि यह भी मजेदार है, उसका implementation of the Game of Life (& Part II) है।

अंत में, जैसा कि मीकल ने मेरे सामने उल्लेख किया था, ब्रायन कार्पर a RPG in Clojure पर काम कर रहा है। वह recently posted some artwork खेल के लिए, इसलिए मैं शर्त लगा रहा हूं कि यह अभी भी काम कर रहा है;)

मुझे डेटा के साथ काम करने के लिए अनुक्रम पुस्तकालयों का उपयोग करना पसंद है; यह map और reduce जैसे अबास्ट्रक्शंस का उपयोग करके अधिक प्राकृतिक लगता है, और मजेदार, आसान उपकरण जैसे juxt सरल अनिवार्य पुनरावृत्तियों के बजाए। सुप्रसिद्ध और अच्छी तरह से लागू अनिवार्य एल्गोरिदम को पुन: कार्यान्वित करने में क्लोजर/कार्यात्मक लैंग का उपयोग करके, मैंने पाया है कि कर चुकाया है।

मज़े करो!

3

सिमुलेशन दुभाषिया का एक रूप है - जो एक कार्यात्मक शैली में लिखना आसान है। उन्हें संकलक के रूप में इलाज के आधार पर self-optimizing simulators के रूप में भी डिज़ाइन किया जा सकता है।

+0

धन्यवाद, क्या आप सिमुलेशन के लिए "दुभाषिया के रूप" के रूप में अधिक उदाहरण/संदर्भ साझा कर सकते हैं? मैं प्रोग्रामिंग की गैर-ओओ शैलियों के लिए काफी नया हूं और सोचने के तरीके से बचने के लिए बस शुरू कर रहा हूं। मैं अंततः सिमुलेशन के लिए एक डीएसएल लिखना चाहता हूं, जिस पर मैं काम कर रहा हूं, इसलिए उस दिशा में किसी भी अतिरिक्त पॉइंटर्स की सराहना की जाएगी, धन्यवाद। – limist

3

अंकल बॉब हाल ही में क्लोजर के साथ खेल रहा है और विशेष रूप से एक कक्षीय सिम्युलेटर को अपने सबसे सार्वजनिक उदाहरण के रूप में लिख रहा है।

कुछ लिंक:

4

मैं Clojure में एक खेल लिख रहा हूँ, एक ज्यादातर कार्यात्मक शैली का उपयोग कर। उदाहरण के लिए, पूरे गेम स्टेट को एक अपरिवर्तनीय डेटा संरचना के रूप में मॉडलिंग किया गया है।

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

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

कुल मिलाकर, मैं क्लोजर से सिमुलेशन/गेम के लिए भाषा के रूप में खुश हूं।

इस अनुभव के आधार पर बातें मुझे लगता है कि खेल के लिए Clojure में सुधार होगा/सिमुलेशन होगा:

    विशेष रूप से समारोह मापदंडों और वापसी के रूप में पुरातन के लिए
  • बेहतर समर्थन, महत्व देता
  • कोर भाषा कार्यों का कार्यान्वयन कि स्मृति आवंटन पर कम कठिन हैं (जीसी दबाव इंटरैक्टिव गेम के लिए एक मुद्दा है!)

आप यहां गेम का प्रारंभिक संस्करण देख सकते हैं: Ironclad - Generals of Steam। यह मूल रूप से एक steampunk थीम्ड रणनीति खेल है।

3

अन्य उत्तरों के पूरक के लिए: नामक एक अनुशासन है जिसे कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग है जो समय में परिवर्तन करने वाले सिस्टम के कार्यात्मक प्रतिनिधित्व के मुद्दे को संबोधित करता है और बाहरी घटनाओं पर प्रतिक्रिया करता है। हास्केल विकी पर

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