2015-06-16 8 views
6

ऐसा लगता है कि फ्रेजफ्रीज संख्या अक्षर को सामान्यीकृत कैसे करता है?

1/2 

डबल मूल्य 0.5 वापस जाने के लिए मूल्यांकन कर सकते हैं।

शाब्दिक 1Int प्रकार का है। ऐसा लगता है कि Double पर प्रचारित किया गया है, जो Real वर्ग में एक प्रकार है और इस प्रकार / ऑपरेटर जानता है। यह कैसे होता है? क्या यह fromInt 1 के साथ शाब्दिक 1 को चुपचाप बदलने के हास्केल दृष्टिकोण का उपयोग कर रहा है या कुछ और चल रहा है? Double को उपयोग करने के लिए Real के उदाहरण के रूप में कैसे चुना गया है? क्या Haskell में "डिफ़ॉल्ट" उदाहरण प्रकारों की एक सूची है?

+0

यह एक बहुत अच्छा सवाल है, क्योंकि [आधिकारिक भाषा विनिर्देश] (http://www.frege-lang.org/doc/Language.pdf) संख्यात्मक अक्षरों के लिए बहुरूपता का कोई उल्लेख नहीं करता है।हास्केल में, एक शाब्दिक प्रकार में 'न्यू ए => ए' होता है, जो उस संदर्भ में जो भी संख्यात्मक प्रकार काम करता है, वह हो सकता है, यह हो सकता है कि इसी प्रकार का जादू यहां जा रहा है, लेकिन मुझे पता नहीं चला निश्चित रूप से 5 मिनट में मैंने इसे ढूंढने में बिताया। – bheklilr

उत्तर

3

प्रकार के संकेतक के बिना सरल दशमलव अक्षर (यानी अक्षरों में से एक एलएनडीएफ) स्वचालित रूप से फ्री इंटेल में टाइप नहीं होता है।

वे उस प्रकार को असाइन करेंगे जो आप संभवतः चाहते थे, और शाब्दिक रूप से तदनुसार अनुकूलित किया जाएगा। यही कारण है कि उन्हें डीडब्ल्यूआईएम (मेरा मतलब है) शब्द कहा जाता है।

यह "हास्केल के अंतर" दस्तावेज़ में उल्लिखित है। और यह निश्चित रूप से भाषा संदर्भ मैनुअल में भी होना चाहिए। यदि यह अभी तक नहीं है, तो यह होना चाहिए क्योंकि लेखक बेहद आलसी है।

संक्षेप में, डीडब्ल्यूआईएम इस तरह काम करता है: जब प्रकार चेकर पहली बार शाब्दिक देखता है, तो यह इसके लिए एक प्रकार चर वैरिएबल निर्दिष्ट करता है, साथ ही उस प्रकार चर के लिए एक संख्या बाधा। बाद में, दूसरे पास में, यह सभी डीडब्ल्यूआईएम साहित्य प्राप्त करता है। और अब, टाइप वैरिएबल निम्न राज्यों में से एक में है:

  1. किसी प्रकार के साथ एकीकृत, जैसे लांग, डबल या इसी तरह। शाब्दिक रूप से टाइप किया जाएगा।
  2. किसी अन्य प्रकार के साथ एकीकृत: यह एक त्रुटि है।
  3. एक प्रकार के हस्ताक्षर से एक प्रकार परिवर्तक के साथ एकीकृत: शाब्दिक को इंट के रूप में टाइप किए गए शाब्दिक से एक आवेदन के साथ प्रतिस्थापित किया जाता है।
  4. बिलकुल भी एकीकृत नहीं है: यदि टाइप वैरिएबल (एक उप प्रकार का) वास्तविक है, तो प्रकार डबल है अन्यथा Int।

आपके उदाहरण में, डिवीजन ऑपरेटर की वास्तविक बाधा के कारण अक्षरों को डबल टाइप किया गया है।

दशमलव बिंदु के साथ शाब्दिक के लिए एक समान दृष्टिकोण लिया जाता है, हालांकि, वे वास्तविक बाधा के साथ शुरू होते हैं, और इस प्रकार फ्लोट या डबल या डबल से आवेदन कर सकते हैं।

ध्यान दें कि मामले 3 को छोड़कर रनटाइम पर कोई प्रकार का रूपांतरण या प्रकार कास्ट नहीं है।

कारणों को आमतौर पर हास्केल में अधिभारित नहीं किया जाता है, अनावश्यक वर्ग की बाधाओं से बचने के लिए, क्योंकि उनके कार्यान्वयन के परिणामस्वरूप महंगा कोड होता है। इसके अलावा, चूंकि हमारे पास मोनोमोर्फिज्म प्रतिबंध नहीं है, इसलिए आप पॉलिमॉर्फिक स्थिरांक को गलती से प्राप्त कर सकते हैं। (सोचें fibs = 1: 1: ...)

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

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