में राज्य के विभिन्न, इंटरैक्टिंग स्तर मैं 4 बिट माइक्रोप्रोसेसर अनुकरण कर रहा हूं। मुझे रजिस्टरों, मेमोरी और चलने वाले आउटपुट (बेंच पॉइंट्स को फ़ेच-निष्पादित चक्र काउंटर के लिए भी ट्रैक रखने की आवश्यकता है)। मैंने मोनैड के बिना ऐसा करने में कामयाब रहा है, लेकिन यह स्पष्ट रूप से उस सामान के आस-पास गुजरने में गन्दा लगता है। इसके अलावा फ़ंक्शन परिभाषा गन्दा, लंबी और पढ़ने के लिए कठिन है।हैकेल
मैंने इसे monads के साथ करने की कोशिश की है और यह सिर्फ एक साथ फिट नहीं है। मैंने सभी अलग-अलग राज्य घटकों को एक प्रकार के रूप में इलाज करने की कोशिश की, लेकिन इससे मुझे मूल्य बनाने की समस्या के साथ छोड़ दिया गया।
State Program() -- Represents the state of the processor after a single iteration of the fetch execute cycle
एकमात्र ऐसा तरीका था जिसने कोई अर्थ बनाया। लेकिन उस बिंदु पर भी परेशान क्यों? मैं स्ट्रिंग मेरी समग्र प्रकार से बाहर खींच रहा है और मूल्य
State Program' String
जो महान काम किया, तथ्य यह है कि मैं चल रहा है उत्पादन की जरूरत के लिए छोड़कर रूप में यह इलाज से यह टूट की कोशिश की। कोई फर्क नहीं पड़ता कि मैंने क्या किया था मैं एक ही समय में स्ट्रिंग और राज्य दोनों को पकड़ नहीं सकता था।
अब मैं मोनड ट्रांसफार्मर के साथ जुड़ने की कोशिश कर रहा हूं। ऐसा लगता है कि मुझे राज्य के सभी अलग-अलग स्तरों को अलग करना है। लेकिन मेरा सिर तेजी से विस्फोट कर रहा है।
StateT Registers (StateT Memory (State Output)) a =
StateT (registers -> (StateT Memory (State Output)) (a,registers))
StateT Registers (StateT Memory (State Output)) a =
StateT (registers -> (Memory -> (Output -> (((a,Registers),Memory),Output))))
मैंने अभी तक एफईसायकल काउंटर में भी नहीं रखा है!
सवाल: सही रास्ते पर
- एम आई?
- देखकर कि मैं अब मोनैड ट्रांसफार्मर खींच रहा हूं, क्या यह "आउटपुट आउटपुट" को राज्य के रूप में इलाज करना बंद करना संभव है और इसे आईओ मोनड पर बंद कर दें? यह शानदार होगा, इसे पकड़ने के बजाय मैं इसे प्रिंट कर सकता था।
- मुझे राज्य को कितनी परतों को अलग करना चाहिए? मैं दो अलग-अलग परतों को देख सकता हूं, लेकिन वे एक दूसरे पर बारीकी से निर्भर करते हैं (स्मृति और रजिस्ट्रार दोनों स्मृति और रजिस्टरों दोनों की स्थिति पर निर्भर करते हैं)। क्या मुझे उन्हें एक ही राज्य के रूप में एक साथ रखना चाहिए या उन्हें अलग करना चाहिए और उन्हें ढेर करना चाहिए? कौन सा दृष्टिकोण सबसे पठनीय कोड का उत्पादन करेगा?
शायद "चल उत्पादन" सबसे अच्छा लेखक इकाई (http://monads.haskell.cz/html/writermonad.html देखें) का उपयोग प्रतिनिधित्व किया जा सकता है? –