2011-12-07 13 views
7

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

वर्तमान में, प्रत्येक इनपुट के बाद हमेशा एक आउटपुट होता है लेकिन यह अंततः इसे बदलने के लिए दिलचस्प हो सकता है।

मैं रॉस पैटरसन द्वारा ऑटोमैटॉन ट्रांसफार्मर के साथ इसे लागू करने में सफल रहा। मुझे यकीन नहीं है कि मेरा समाधान इष्टतम है।

  • क्या अच्छे उदाहरण हैं यह कैसे करें? शायद टेस्ट कोड के साथ भी?
  • क्या यह एक मोनड के साथ भी हासिल किया जा सकता है? (उदाहरण ?, स्पष्टीकरण क्यों असंभव है?)

संपादित करें: अधिक विशिष्टताओं के लिए कॉल के बाद, मैंने यहां कोड जोड़ा। अब मैं इसे हटा रहा हूं (यह समझ में नहीं आया) और कुछ अन्य स्पष्टीकरण जोड़ें। मेरा सवाल जवाब दिया गया है।

मेरा इरादा तीर/स्ट्रीम ट्रांसफॉर्मर/जो कुछ भी खिलाया गया है, उसके बाद प्रत्येक उपयोगकर्ता इनपुट के बाद मुख्य ईवेंट लूप स्टॉप होना था। फिर यह वर्तमान automaton स्थिति को संग्रहीत करेगा और सभी संभावित इनपुट (नकली घटनाओं) को एक-एक करके automaton पर भेज देगा और देखें कि उन्हें कैश करने के लिए संसाधनों को लोड किया जाना चाहिए। अगली असली घटना के बाद, यह बेहतर प्रतिक्रिया के लिए कैश का उपयोग करेगा। मुख्य गणना इस से प्रभावित नहीं होनी चाहिए।

+0

उत्तर देने के लिए योग्य नहीं है, लेकिन यह आपके लिए उपयोगी हो सकता है। इस लाइब्रेरी को देखें: http://hackage.haskell.org/package/enumerator ... लेकिन तीर एक अच्छा अमूर्त प्रतीत होता है। मैं शर्त लगाऊंगा कि अधिक विशिष्टता लोगों को जवाब देने में मदद करेगी। अधिक विशिष्टताओं पर – jberryman

+0

+1। – sclv

उत्तर

8

आपके द्वारा उल्लिखित सभी उपयोग मामलों को Netwire लाइब्रेरी द्वारा कवर किया गया है। यह तार तीरों के परिवार के लिए रॉस 'automaton तीर का एक सामान्यीकरण प्रदान करता है। मैंने अभी तक wiki page समाप्त नहीं किया है, लेकिन इसे आपको शुरू करने के लिए पर्याप्त देना चाहिए।

कुछ monad m के लिए Kleisli (LogicT m) के साथ इसे संयोजित करने के लिए आपको नोडेटर्मिनिस्टिक तार मिलते हैं।

और एक अतिरिक्त नोट के रूप में: आप जो चाहते हैं वह एक मोनड नहीं है।

+1

हेलो इर्ट्स! क्या आप समझा सकते हैं कि यह एक मोनड क्यों नहीं है? – Duschvorhang

+0

@Duschvorhang: तीर monads का एक सामान्यीकरण हैं। [हास्केल विकी> तीर] देखें (http://haskell.org/haskellwiki/Arrow) –

+0

@ डूशवोरहैंग: आप जॉन ह्यूजेस के §3.0 के पार्सर उदाहरण में एक समान सीमा देख सकते हैं [[मोनैड्स टू तीर] [http: //www.ittc.ku.edu/Projects/SLDG/filing_cabinet/Hughes_Generalizing_Monads_to_Arrows.pdf) के साथ सावधानीपूर्वक स्पष्टीकरण के साथ कि तीर आवश्यक अभिव्यक्ति प्रदान करता है। इसके अलावा, यह एक अच्छा पढ़ा है। – acfoltzer

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

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