2011-01-22 17 views
5

हाय इस स्टैक ओवरफ़्लो पर मेरी पहली बार पोस्टिंग है और मैं OCamlओकैमल में रिकर्सिव प्रकार?

में

मैं एक प्रकार वृक्ष आदि है कि नोड्स/लीफ़्स/निर्माण करने के लिए कोशिश कर रहा हूँ एक प्रकार का निर्माण करने की कोशिश करते हुए एक समस्या हुई। अभी तक मेरे पास इतना ही है।

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree) | .... 

मेरा नोड एक प्रकार का होना चाहिए जिसमें उसका नाम और एक पेड़ टुपल के रूप में होता है। लेकिन जब मैंने इसे संकलित करने की कोशिश की तो कहा कि पेड़ को दो तर्कों की आवश्यकता है। तो मैंने कोशिश की:

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree ('a*'b)) 

और मुझे अभी भी एक त्रुटि मिल रही थी। जो कुछ भी आप देखते हैं मैं गलत कर रहा था? धन्यवाद!

+0

मेरा वाक्यविन्यास बदल गया बस गलत था। यह वास्तव में नोड ('ए * (' ए, 'बी) पेड़ होना चाहिए) – Brian

+1

यह सही है। यद्यपि गैसके के जवाब को स्वीकार करने के लिए विनम्र होगा, क्योंकि यह आपके प्रश्न का उत्तर देता है। मुझे आश्चर्य है कि क्या आप सुनिश्चित हैं कि आप पत्तियों और अंदरूनी नोड्स के लिए अलग-अलग प्रकार चाहते हैं? –

उत्तर

9
type ('a, 'b) tree = Empty | Leaf of 'b | Node of 'a * ('a, 'b) tree 

आप शायद, अपने नोड्स दो एक से अधिक बच्चा है चाहते हैं, हालांकि

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a, 'b) tree * 'a * ('a, 'b) tree 

पुनश्च: एक प्रकार घोषणा की तुलना में सावधान रहें, Foo of bar * baz और Foo of (bar * baz) ही नहीं हैं: पहला एक निर्माता Foo है दो क्षेत्रों के साथ, दूसरे में केवल एक फ़ील्ड है, जो (bar * baz) प्रकार है।

+0

क्या आप कन्स्ट्रक्टर परिभाषा में कोष्ठक को छोड़ने के प्रभाव की व्याख्या कर सकते हैं? मैंने सोचा कि 'बार * बाज' tuples को परिभाषित करने का एक आसान तरीका था। – Antoine

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