haskell - How to convert a data type into a MonadState -


मेरे पास इन प्रकार हैं:

  डेटा ट्री ए = शाखा (ट्री ए) ए ( पेड़ ए) | लीफ डेरिविंग (ईक, ऑर्ड, शो) न्यूटाइप राज्य का ए = स्टेट '{runState' :: (एस, गणना) - & gt; (ए, एस, गणना)}  

इन उदाहरणों के साथ:

  उदाहरण मोनद (राज्य का) उदाहरण मोनैडास्टेट (राज्य)   

और मुझे फ़ंक्शन बनाने की आवश्यकता है

  label :: MonadState m int = & gt; ट्री ए - & gt; एम (पेड़ (इंट, ए))  

लेकिन मुझे नहीं पता कि मैं कैसे एक पेड़ को state ' में परिवर्तित कर सकता हूं।

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

  getLabelAndIncr :: MonadState m int = & gt; एम + आईटी मिलेल और एंड्रॉक्ट = चालू करें & lt; - $ चालू करें + वर्तमान रिटर्न चालू करें  

फिर अपने label फ़ंक्शन में आप ऐसा कुछ कर सकते हैं

< प्री> label :: MonadState m int = & gt; ट्री ए - & gt; मी (पेड़ (इंट, ए)) लेबल = लीफ लेब लेबल (शाखा के बायीं नोड दाएं) = आई एल एंड एलटी; - getLabelAndInc नईनोड = (एल, नोड) नई लेफ्ट और एलटी; - ??? न्यूराइट और लेफ्टिनेंट; - ??? वापस $ branch newLeft newNode newRight

आपको यह पता लगाना होगा कि ??? में क्या होता है, मैं यह सब एक को हल करने नहीं जा रहा हूँ आपके लिए, लेकिन यह काफी सीधा व्यायाम होना चाहिए। यहाँ क्या हो रहा है यह है कि getLabelAndIncr का उपयोग करने के लिए वर्तमान लेबल मान हो जाता है, फिर राज्य में बढ़ी गई मान संग्रहीत करता है फिर एक नया नोड मान बनाया गया है जिसे उस लेबल से टैग किया गया है, बाएं और दायें शाखाएं अपने टैग प्राप्त कर लेती हैं, और एक नया पेड़ लौटाया गया है, जो अब लेबल है राज्य का प्रकार हर बार एक ही रहता है, जो कि मोनादस्टेट एम इंट द्वारा तय किया गया है, जो कहता है कि m एक राज्यपूर्ण मोनद है जो हमेशा है एक राज्य मान जो Int है।


Comments

Popular posts from this blog

c# - SignalR: "Protocol error: Unknown transport." when navigating to hub -

c# - WPF Expander overlay used in ItemsControl -

class - Kivy: how to instantiate a dynamic classes in python -