यह ज्यादातर एफपी के बारे में एक सैद्धांतिक सवाल है, लेकिन मैं अपनी बात को स्पष्ट करने के लिए टेक्स्ट एडवेंचर (जैसे पुराने-स्कूल ज़ोर्क) लूंगा। मैं आपकी राय जानना चाहता हूं कि आप एफपी के साथ एक अनुकरणीय अनुकरण कैसे करेंगे।
पाठ रोमांच वास्तव में OOP के लिए कहते हैं। उदाहरण के लिए, सभी "कमरे" एक Roomवर्ग के उदाहरण हैं , आपके पास एक बुनियादी Itemवर्ग और इंटरफेस Item<Pickable>हो सकते हैं जैसे कि आप ले जा सकते हैं और इसी तरह की चीजें।
एफपी में विश्व मॉडलिंग अलग काम करती है, खासकर यदि आप एक ऐसी दुनिया है कि में अचल स्थिति लागू करना चाहते हैं चाहिए खेल की प्रगति के रूप में उत्परिवर्तित (वस्तुओं ले जाया जाता है, दुश्मन हार जाते हैं, स्कोरिंग बढ़ता है, खिलाड़ी अपने स्थान बदलता है)। मैं एक बड़ी वस्तु की कल्पना करता हूं Worldजिसमें यह सब है: आप कौन से कमरे का पता लगा सकते हैं, वे कैसे जुड़े हुए हैं, खिलाड़ी क्या कर रहे हैं, लीवर को क्या ट्रिगर किया गया है।
मुझे लगता है कि एक शुद्ध दृष्टिकोण मूल रूप से किसी भी कार्य के लिए इस बड़ी वस्तु को पारित करना होगा और क्या यह उनके द्वारा (संभवतः संशोधित) वापस आ गया है। उदाहरण के लिए, मेरे पास एक moveToRoomफ़ंक्शन है जो Worldइसे World.player.locationबदलकर नए कमरे में देता है, World.rooms[new_room].visited = Trueऔर इसी तरह।
यहां तक कि अगर यह अधिक "सही" तरीका है, तो इसके लिए पवित्रता लागू करना प्रतीत होता है। प्रोग्रामिंग भाषा के आधार पर, इस संभावित बहुत बड़ी Worldवस्तु को आगे-पीछे करना महंगा हो सकता है। साथ ही, प्रत्येक फ़ंक्शन को किसी भी Worldऑब्जेक्ट तक पहुंच की आवश्यकता हो सकती है । उदाहरण के लिए, एक कमरा सुलभ हो सकता है या किसी अन्य कमरे में ट्रिगर किए गए लीवर के आधार पर नहीं हो सकता है क्योंकि यह बाढ़ हो सकता है, लेकिन अगर खिलाड़ी एक जीवन जैकेट ले जाता है, तो यह वैसे भी इसमें प्रवेश कर सकता है। एक राक्षस आक्रामक हो सकता है या नहीं इस पर निर्भर करता है कि खिलाड़ी ने अपने चचेरे भाई को दूसरे कमरे में मार दिया है। इसका मतलब है कि roomCanBeEnteredफ़ंक्शन को एक्सेस करने की आवश्यकता है World.player.invetoryऔर World.rooms, describeMonsterएक्सेस करने की आवश्यकता है World.monstersऔर इसी तरह (मूल रूप से, आपको चाहिएपूरे भार को पास करें)। यह वास्तव में मुझे एक वैश्विक वैरिएबल के लिए कॉल करने के लिए लगता है, भले ही यह विशेष रूप से एफपी में अच्छी प्रोग्रामिंग शैली है।
आप इस समस्या को कैसे हल करेंगे?