कॉनर मैक्ब्राइड के कुछ काम, डिफ , डिसेक्ट , डेटा प्रकार के व्युत्पन्न से संबंधित है उनके "एक प्रकार के छेद वाले संदर्भ"। यही है, यदि आप उस प्रकार के व्युत्पन्न को लेते हैं जिसे आप डेटा प्रकार के साथ छोड़ देते हैं जो आपको दिखाता है कि किसी भी बिंदु पर डेटा प्रकार अंदर से कैसा दिखता है।
उदाहरण के लिए, यदि आपके पास एक सूची है (हास्केल में)
data List a = [] | a : List a
इस से मेल खाती है
data List a = 1 + a * List a
और थोड़ा गणितीय जादू के माध्यम से, व्युत्पन्न है
data ListDeriv a = List a * List a
जिसका अर्थ है कि सूची के किसी भी बिंदु पर बाईं ओर एक सूची और दाईं ओर एक सूची होगी। हम व्युत्पन्न डेटा संरचना का उपयोग करके मूल सूची के माध्यम से ज़िप कर सकते हैं।
अब, मैं रेखांकन के साथ कुछ ऐसा ही करने में दिलचस्पी रखता हूं। रेखांकन का एक सामान्य प्रतिनिधित्व कोने और किनारों का एक समूह है, जो संभवतः डेटा प्रकार के साथ लागू किया जा सकता है जैसे:
data Gr a b i = Gr [(i,a)] [(i,i,b)]
यदि मैं इसे सही ढंग से समझता हूं, तो ग्राफ सूचकांक के संबंध में इस डेटा प्रकार का एक व्युत्पन्न i
, कुछ ऐसा होना चाहिए।
data GrDeriv a b i = d/di (Gr a b i)
= d\di ( [a*i] * [b*i^2] )
= (d\di [a*i]) * [b*i^2] ) + [a*i]*(d/di [b*i^2])
= (a* [a*i] * [a*i]) * [b*i^2] )
+ [a*i] * (2*b*i) *[b*i^2]*[b*i^2])
= InNodes { nodesLeft :: [(a,i)]
, nodeLbl :: a
, nodesRight :: [(a,i)]
, edges :: [(b,i,i)] }
| InEdges { nodes :: [(a,i)]
, adjNode :: Either (b,i) (b,i)
, edgesLeft :: [(b,i,i)]
, edgesRight :: [(b,i,i)] }
मुझे यह व्युत्पत्ति के लिए उत्पाद नियम और श्रृंखला नियमों के उपयोग के माध्यम से मिला, और हालांकि संभवतः कुछ त्रुटियां हैं, यह सामान्य योजना का पालन करने के लिए लगता है। इस संरचना में आपको या तो नोड्स (InNodes कंस्ट्रक्टर) या किनारों (किनारों में) पर ध्यान केंद्रित किया जाएगा और आपको वह स्थान दिया जाएगा जहां आपको संबंधित डेटा दिखाई देगा।
लेकिन यह वह नहीं है जिसकी मैं उम्मीद कर रहा था। मैं मार्टिन एरविग्स फंक्शनल ग्राफ लाइब्रेरी के इंटरफेस से अधिक निकटता से निर्माण की उम्मीद कर रहा था। विशेष रूप से, मैं एक नोड पर एक संदर्भ देखना चाहता हूं जो नोड के लेबल और दो आसन्न सूचियों का प्रतिनिधित्व करता है, एक आउटगोइंग के लिए, एक आने वाले के लिए।
Node a b = ([(i,b)],a,[(i,b)])
मुझे आशा है कि हालांकि, आसन्न प्रतिनिधित्व के रूप में व्युत्पन्न के साथ कुछ शब्द हैं, अकेला a
छेद, प्रत्येक छेद स्थान पर, प्रत्येक किनारे के आसन्न प्रतिनिधित्व / विच्छेदन।
चूंकि व्युत्पन्न मूल के समान कार्य नहीं है, लेकिन व्युत्पन्न का एकीकरण (किफ़ायत) है, क्या किसी प्रकार का एकीकरण एनालॉग है जो व्युत्पन्न को नोड संदर्भों के संग्रह में बदलने का काम करेगा? मूल संरचना को पुनर्प्राप्त करने के लिए प्रत्यक्ष एकीकरण नहीं है, आप पर ध्यान दें, लेकिन मूल के बराबर संरचना लेकिन एक अधिक एल्गोरिदम के अनुकूल प्रतिनिधित्व में।
अगर वहाँ है, मुझे आशा है कि संबंध प्रकार की संरचना कुछ आसान "कोने और किनारों के सेट" भाषा द्वारा निर्दिष्ट की जा सकती है और मैं उस संरचना के साथ काम करने के लिए एक कुशल पुस्तकालय प्राप्त कर सकता हूं। इस तरह के एक अनुकरण का उपयोग "ग्राफ सिद्धांत से परे" संरचनाओं का अध्ययन करने के लिए किया जा सकता है: हाइपर ग्राफ, सरल परिसर ...
इसलिए। क्या यह विचार संभव है? उपयोगी? क्या इस प्रकार का कोई अध्ययन किया गया है जिसके बारे में मैं और अधिक पढ़ सकता हूं?
परिशिष्ट
यह, मुझे पूरा यकीन है कि (श्रेणी सिद्धांत?) व्यक्त किया जा सकता है
या
मैं एक के लिए लगता है कि यह कुछ वादा दिखाता है, लेकिन मुझे आगे जाने के लिए परिष्कार की कमी है। मुझे पता है कि वहाँ कुछ काम करना होगा वहाँ कनेक्शन आगे की खोज।
* यदि लिंक कभी टूटता है, तो प्रशस्ति पत्र: राई, इनजोंग, एट अल। "DRAND: वायरलेस एड हॉक नेटवर्क के लिए रैंडमाइज्ड TDMA शेड्यूल किया गया।" मोबाइल कंप्यूटिंग पर IEEE लेनदेन 8.10 (2009): 1384-1396।