F #

2010-11-10 11 views
5

में रिकर्सिव मानचित्र संदर्भ F # में एक रिकर्सिव मानचित्र बनाने का प्रयास कर रहा हूं।F #

type RecMap = Map<string, RecMap>

काम नहीं करेगा, RecMap को चक्रीय संदर्भ की वजह से। लेकिन क्यों यह है कि न तो

type RecMap = Map<string, RecMap ref>

है और न ही

type RecMap = (Map<string, RecMap>) ref

काम करता है? मैंने सोचा कि नक्शा के मूल्य प्रकार को RecMap ref में बनाना चाहिए था।

एक एक सदस्य रिकॉर्ड प्रकार कार्यों में RecMap दोबारा लिख ​​कर समस्या को धोखा देने

type RecMap = { r : Map<string, RecMap> }

रिकॉर्ड्स संदर्भ प्रकार बस ref की तरह हैं, लेकिन क्यों पुनरावर्ती परिभाषा में नहीं refs काम करते हैं, रिकॉर्ड करते हैं जब?

उत्तर

6

आपके प्रारंभिक प्रयास type abbreviations हैं, जबकि आपका अंतिम प्रयास एक नए प्रकार को परिभाषित करता है। संकलन के दौरान, संक्षेप में प्रतिस्थापन के माध्यम से मिटा दिया जाता है। चूंकि आपको चक्रीय परिभाषा मिली है (भले ही यह ref को शामिल करने के साथ अतिरिक्त स्तर से गुज़रती है), प्रतिस्थापन कभी समाप्त नहीं होगा।

मैं शायद यह बजाय करना चाहते हैं:

type RecMap = RecMap of Map<string, RecMap> 
+0

उर्फ, प्रकार संक्षिप्त नाम - http://msdn.microsoft.com/en-us/library/dd233246.aspx –

+0

@Tony - धन्यवाद, मैं मैंने अपना जवाब अधिक सटीक होने के लिए अपडेट किया है। – kvb

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

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