2009-06-14 14 views
5

मैं हास्केल में एक फ़ंक्शन लिख रहा हूं जो 32 बिट int की लंबाई से परे संख्याओं से संबंधित है। मुझे ऐसा करने के लिए प्रकार नहीं मिल रहा है और मुझे गलत शर्तों की तलाश है।हास्केल 64 बिट संख्यात्मक प्रकार

यह परिशुद्धता के किसी भी हानि के बिना बारे में 2^40 की लंबाई के साथ संख्या धारण करने के लिए सक्षम होने की जरूरत

उदाहरण:

addTwo :: Int -> Int -> Int 
addTwo a b = a + b 

main :: IO() 
main = do 
    putStrLn (show (addTwo 700851475143 1)) 
+4

विडंबना यह है कि अगर आपने एडटवो के लिए हस्ताक्षर नहीं रखा होता, तो यह काम करता, क्योंकि addTwo को पॉलिमॉर्फिक (यानी Num a => a -> ए -> ए), और फिर संख्याओं के लिए, यह सबसे सामान्य प्रकार के लिए डिफ़ॉल्ट हो गया होगा, जो इंटीजर – newacct

+5

है लेकिन मैंने कुछ भी नहीं सीखा होगा, जो कि संपूर्ण बिंदु है – Yacoby

उत्तर

21

असंबद्ध परिशुद्धता के लिए, इंटीजर प्रकार का उपयोग करें। परिशुद्धता के 64 बिट्स के लिए, प्लेटफार्मों में, Data.Int.Int64 का उपयोग करें। Hoogle के साथ दोनों को ढूंढना आसान होगा: http://haskell.org/hoogle/

7

आप Int के बजाय Integer डेटा प्रकार हैं:

addTwo :: Integer -> Integer -> Integer 
0

Integer का उपयोग करें, जो Int के बजाय असीमित परिशुद्धता है।

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