2012-02-28 25 views
15

मैं यहां कुछ शब्दावली ढूंढ रहा हूं। ऐसे कई आकार हैं जिनमें आम नाम हैं। उदाहरण L a = Empty | Cons a L के लिए आम तौर पर एक "सूची" कहा जाता है, जबकि T a = Leaf a | Node (T a) (T a) एक "बाइनरी पेड़" है और St s a :: St (s->(a,s)) राज्य इकाई के रूप है।टाइप पैटर्न का नाम: आर ए बी = क्यू (ए -> (आर ए बी, बी))

मुझे पता है कि अगर इस तरह एक आकार एक नाम है करना चाहते हैं:

data R a b = Q (a -> (R a b,b)) 

मैं तीर चौखटे और राज्य मशीन कार्यान्वयन में इस पैटर्न देखा है। रिकर्सिव फ़ंक्शन इसे राज्य मोनाड या कॉन्ट मोनाड की तरह थोड़ा महसूस करता है। यह भी (->) और (>=>) जिसके लिए मैं तीर का एक उदाहरण परिभाषित देखा है के अलावा केवल संरचना है।

क्या इस डेटा संरचना के लिए कोई आम नाम है?

+8

आप एक बोन्साई पेड़ वहाँ :) मिल गया है। एक बेहतर बाइनरी पेड़ 'टी ए = शाखा (टी ए) (टी ए) है पत्ता ' – amindfv

+0

@amindfy: आप सही हैं। मैंने इसे ठीक कर दिया है। धन्यवाद। –

+1

@ जॉनएफ.मिलर क्या आप उस 'टी' में कहीं कुछ 'ए' स्टोर नहीं करना चाहते हैं? : डी (माफ करना ... मुझे करना था ...) (या शायद यह एक प्रेत प्रकार है !?: पी) – Ptival

उत्तर

23

यह automaton arrow है, जिसे मीली मशीन भी कहा जाता है। आपका विशिष्ट उदाहरण केवल अंतर्निहित तीर के रूप में (->) का उपयोग करता है; कुछ मोनैड एम (जो a -> ba -> m b में बदलता है, उदाहरण के लिए data R a b = Q (a -> MyMonad (b, R a b))) के लिए एक और आम पसंद Kleisli m है।

यह आमतौर पर functional reactive programming में प्रयोग किया जाता है (विशेष रूप से, arrowised एफआरपी - देखते हैं, जैसे netwire और इन दो ब्लॉग पोस्ट: 1, 2), और (iteratees) की तरह सामान्य स्ट्रीम प्रसंस्करण के लिए आवेदन किया है।

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

+1

यह वही है जो मैं खोज रहा था और अधिक। बहुत पूर्ण उत्तर के लिए धन्यवाद। –

8

मुझे लगता है कि डेटा संरचना एक coroutine कहेंगे।

यह एक गणना व्यक्त करता है जिसे किसी अन्य गणना के समानांतर में नियंत्रित किया जा सकता है, और इसका मूल्यांकन चरणबद्ध तरीके से किया जा सकता है। जब तक इंटरफ़ेस प्रस्तुत सटीक इंटरफ़ेस है कि हास्केल में Coroutines के वर्ग के लिए प्रयोग किया जाता है (नहीं है एक अधिक सामान्य coroutine भी इकाई-नास्तिक है, जिसका अर्थ लिपटे फ़ंक्शन कि एक m (R a b, b), और coroutines इनपुट का उपभोग करने की जरूरत नहीं है, जबकि आपको यहां हमेशा a के साथ गणना करना है), यह काफी समान है।

डेटा संरचना भी कॉमोनैड कहलाता है इसका एक सबसेट का प्रतिनिधित्व करता है।

3

उस प्रकार प्रकार मैं एक ट्रांसड्यूसर के लिए उपयोग करने के लिए उम्मीद करेंगे से संबंधित लग रहा है - मैं सिर्फ उम्मीद करेंगे कि उत्पादन प्रकार monoidal हो। विकिपीडिया में ट्रांसड्यूसर की एक विशेष श्रेणी, finite state transducers पर एक पृष्ठ है, जो साहित्य खोज के लिए एक अच्छा लॉन्चिंग बिंदु होना चाहिए।