2010-12-01 20 views
24

में चेतावनी किसी को कृपया समझा सकता है, इस चेतावनी का क्या अर्थ है?एमएल

stdIn:18.35 Warning: calling polyEqual 

और कारण है कि मैं "एक की क्या ज़रूरत है न कि 'निम्न कथन में एक:

val alreadyVisited = fn : ''a * ''a list -> bool 

यह है समारोह:

fun alreadyVisited(v, []) = false 
    | alreadyVisited(v, x::xs) = if(x=v) then true 
     else alreadyVisited(v, xs); 

अग्रिम धन्यवाद

उत्तर

42

'a साधन "किसी भी प्रकार", जबकि ''a का अर्थ है "किसी भी प्रकार की तुलना समानता के लिए की जा सकती है"। पाप अपने alreadyVisited समारोह तुलना x और v=, x और v एक प्रकार का समर्थन करता है कि उन्हें समानता के लिए की तुलना करने की जरूरत का उपयोग कर CE, ताकि आप प्रकार ''a मिलता है।

चेतावनी का अर्थ है कि आप दो मानों की तुलना समानता के लिए पॉलिमॉर्फिक प्रकार के साथ कर रहे हैं।

यह चेतावनी क्यों उत्पन्न करता है? क्योंकि यह समानता के लिए ज्ञात प्रकारों के दो मूल्यों की तुलना करने से कम कुशल है।

आप चेतावनी से कैसे छुटकारा पा सकते हैं? अपने फ़ंक्शन को किसी भी प्रकार के बजाय केवल एक विशिष्ट प्रकार के साथ काम करने के लिए बदलकर।

क्या आपको चेतावनी की परवाह है? शायद ऩही। ज्यादातर मामलों में मैं तर्क दूंगा कि एक ऐसा कार्य करने से जो किसी भी प्रकार के लिए काम कर सकता है, सबसे कुशल कोड संभव होने से अधिक महत्वपूर्ण है, इसलिए मैं केवल चेतावनी को अनदेखा कर दूंगा।

+0

मुझे एक ही चेतावनी मिलती है, शायद सरलीकृत, मामला: 'मज़ा कुछ_फुन ((* सामग्री *)) = []; संभवतः क्योंकि संकलक खाली सूची के प्रकार का अनुमान नहीं लगा सकता है। कहें, सूची में एक स्ट्रिंग चेतावनी दूर हो जाती है। – brntsllvn

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

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