वास्तव में तीन घातांक ऑपरेटरों रहे हैं। ^
है गैर नकारात्मक अभिन्न घातांक, ^^
पूर्णांक घातांक है, और **
फ्लोटिंग प्वाइंट घातांक है:
(^) :: (Num a, Integral b) => a -> b -> a
(^^) :: (Fractional a, Integral b) => a -> b -> a
(**) :: Floating a => a -> a -> a
कारण टाइप है सुरक्षा: संख्यात्मक आपरेशन के परिणामों को आम तौर पर इनपुट तर्क के रूप में एक ही प्रकार है (रों) । लेकिन आप Int
को फ़्लोटिंग-पॉइंट पावर में नहीं बढ़ा सकते हैं और Int
प्रकार का परिणाम प्राप्त कर सकते हैं। और इसलिए टाइप सिस्टम आपको ऐसा करने से रोकता है: (1::Int) ** 0.5
एक प्रकार की त्रुटि उत्पन्न करता है। यह (1::Int) ^^ (-1)
के लिए जाता है।
एक और तरीका यह डाल करने के लिए: Num
प्रकार ^
के तहत बंद हो जाती हैं (वे एक गुणक उलटा करने के लिए आवश्यक नहीं कर रहे हैं), Fractional
प्रकार ^^
के तहत बंद हो जाती हैं, Floating
प्रकार **
के तहत बंद हो जाती हैं। चूंकि Int
के लिए कोई Fractional
उदाहरण नहीं है, इसलिए आप इसे नकारात्मक शक्ति में नहीं बढ़ा सकते हैं।
आदर्श रूप से, ^
का दूसरा तर्क सांख्यिकीय रूप से गैर-नकारात्मक होने के लिए बाध्य होगा (वर्तमान में, 1^(-2)
रन-टाइम अपवाद फेंकता है)। लेकिन Prelude
में प्राकृतिक संख्याओं के लिए कोई प्रकार नहीं है।
स्रोत
2011-06-19 04:54:01
मैं पूरी तरह से सहमत नहीं हूं कि हास्केल प्रकार मानसिकता बतख टाइपिंग के विपरीत है। हास्केल प्रकार के वर्ग बतख टाइपिंग की तरह काफी हैं। 'क्लास डक जहां क्वाक :: ए -> क्वाक' परिभाषित करता है कि हम बतख की अपेक्षा करते हैं, और फिर प्रत्येक इंस्टेंस कुछ ऐसा निर्दिष्ट करता है जो बतख जैसा व्यवहार कर सकता है। – augustss
@augustss मैं देखता हूं कि आप कहां से आ रहे हैं। लेकिन बतख टाइपिंग के पीछे अनौपचारिक आदर्श वाक्य "अगर यह एक बतख जैसा दिखता है, एक बतख की तरह काम करता है, और एक बतख की तरह quacks, तो यह एक बतख है।" हास्केल में यह एक बतख नहीं है जब तक कि इसे 'डक' का उदाहरण घोषित न किया जाए। –
यह सच है, लेकिन मैं यही है कि मैं हास्केल से अपेक्षा करता हूं। आप कुछ भी कर सकते हैं जिसे आप बतख चाहते हैं, लेकिन आपको इसके बारे में स्पष्ट होना चाहिए। हम ऐसी गलती नहीं करना चाहते हैं जिसे हमने बतख के लिए नहीं कहा था। – augustss