2015-08-20 15 views
6

क्योंये असाइनमेंट अलग-अलग परिणाम क्यों उत्पन्न करते हैं?

let ab a b = a 5 + b 

का उत्पादन करेगा

val ab : a:(int -> int) -> b:int -> int 

और

let ab2 a b = a 5 +b 

val ab2 : a:(int -> int -> 'a) -> b:int -> 'a 

का उत्पादन करेगा क्यों के बीच '+' और 'बी' यह एक अंतरिक्ष इस बनाता है अंतर?

+6

अभिव्यक्ति '+ बी' में,' + 'को एक [यूनरी ऑपरेटर] (https://en.wikipedia.org/wiki/Unary_operation) (केवल' बी' तर्क के रूप में लेना) के रूप में व्याख्या किया जाता है। – Glorfindel

उत्तर

10

पार्सर अस्पष्टता से बचने के लिए विभिन्न वाक्य रचनात्मक विकल्पों को प्राथमिकता देता है।

+ बाइनरी अतिरिक्त ऑपरेटर और यूनरी "सकारात्मक" ऑपरेटर दोनों है। 5 + b इस प्रकार दो तर्कों के अतिरिक्त आवेदन है; लेकिन +b कुछ ऑपरेटर b पर लागू सकारात्मक ऑपरेटर है।

इस प्रकार

let ab a b = a 5 + b 

के रूप में पार्स किया जाता है:

let ab a b = (a 5) + b 

a साथ किया जा रहा है एक पूर्णांक लौटने तो यह b में जोड़ा जा सकता एक पूर्णांक तर्क के एक समारोह; लेकिन

let ab2 a b = a 5 +b 

पार्स किया गया है के रूप में:

let ab2 a b = a (5) (+b) 

a, दो तर्क के एक समारोह किया जा रहा है कोई रास्ता नहीं प्रकार यह रिटर्न का अनुमान लगाने के साथ साथ।

मेरे पास एफ # ऑपरेटर सूची नहीं है, इसलिए सही नाम नहीं देख सकता है। संपादित करें: ऐसा प्रतीत होता है कि मुझे सही ढंग से याद नहीं आया: Arithmetic Operators (F#) :-)।

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