2010-11-01 11 views
5

मैंने एफ # में मूल्य प्रतिबंध के बारे में सभी ट्रेड पढ़े हैं, लेकिन मुझे अभी भी यह समझ में नहीं आया है।एफ # मूल्य प्रतिबंध

error FS0030: Value restriction. The value 'it' has been inferred to have generic type 
    val it : '_a list  
Either define 'it' as a simple data term, make it a function with explicit arguments or, if you do not intend for it to be generic, add a type annotation. 

किसी को भी मेरी मदद कर सकते: एक त्रुटि दिखाने

type tree<'a> = 
    | Nil 
    | Node of (tree<'a> * 'a * tree<'a>) 

let rec flatten = function 
    | Nil -> [] 
    | Node (Nil, b, Nil) -> [b] 
    | Node (l, h, p) -> List.concat [(flatten l);[h];(flatten p)] 

और संकलक: मैं निम्नलिखित कोड है? बहुत बहुत धन्यवाद;)

+2

क्या आप कोड कॉलिंग फ़्लैटन प्रदान कर सकते हैं? मैं इस नमूना को संकलित और चला सकता हूं ठीक – JaredPar

+0

लेकिन जब मैं फ्लैटन निल को बुलाता हूं ;; वहाँ एक समस्या है। पीडीएस के लिए – 877

उत्तर

11

मुझे अपने मानसिक डिबगिंग कौशल का उपयोग करने की अनुमति दें। आप flatten Nil पर कॉल नहीं कर सकते हैं, क्योंकि संकलक इंगित करता है, परिणाम किसी भी प्रकार 'a के लिए 'a list हो सकता है। आपको (flatten Nil : int list) जैसे एक प्रकार की एनोटेशन जोड़नी होगी।

एक असंबंधित नोट पर, फ़्लैटन की परिभाषा में आपका दूसरा मामला अनावश्यक है और इसे हटाया जा सकता है क्योंकि यह तीसरे मामले में भी शामिल है।

+2

+1 ..... – Daniel

+0

"फ्लैटन की परिभाषा में दूसरा मामला अनावश्यक है और इसे हटाया जा सकता है क्योंकि यह तीसरे मामले में भी शामिल है", दूसरे प्रदर्शन के साथ प्रदर्शन बेहतर हो सकता है क्योंकि इससे बहुत सारे अतिरिक्त मैच कम हो जाएंगे? – ca9163d9

+0

@ dc7a9163d9 - हाँ, यह निश्चित रूप से संभव है। लेकिन अगर मैं लक्ष्य को पूरा नहीं कर रहा हूं तो मैं सबसे सरल चीज के लिए डिफ़ॉल्ट हूं और केवल ऐसे अनुकूलन पेश करता हूं। – kvb

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