Int को Int में विभाजित करें और Int को वापस करें


79

मुझे एक फ़ंक्शन की आवश्यकता है जो दो Intएस ( aऔर b) प्राप्त करता है और A/Bजैसा कि रिटर्न करता है Int। मुझे यकीन है कि A/Bहमेशा एक पूर्णांक होगा।

यहाँ मेरा समाधान है:

myDiv :: Int -> Int -> Int
myDiv a b = 
      let x = fromIntegral a
          y = fromIntegral b
      in truncate (x / y)

लेकिन अधिक सरल समाधान खोजना चाहते हैं। कुछ इस तरह:

myDiv :: Int -> Int -> Int
myDiv a b = a / b

मैं इंट को इंट में कैसे बांट सकता हूं और इंट को कैसे प्राप्त कर सकता हूं?

जवाबों:


140

सिर्फ उपयोग क्यों नहीं quot?

quot a b

पूर्णांकों का पूर्णांक भागफल a और b शून्य की ओर झुका हुआ है।


7
या a `quot` bइन्फिक्स प्रेमियों के लिए (वाह, आप वास्तव में बैकस्क्स इंसर्ट बैकटिक्स के साथ बैकस्लैश से बच सकते हैं)।

38
इसके अलावा a `div` b; अगर मुझे सही से याद है, तो quotट्रंकट्स (जैसे डेमास चाहते थे), और divशून्य की ओर गोल हो गए। तो (-3) `quot` 4 == 0, और (-3) `div` 4 == -1
एंटाल स्पैक्टर-ज़बूसकी

5
के लिए +1 div। अधिक गणितीय रूप से अच्छी तरह से व्यवहार किया जाता है, quotएक कुतिया होती है जब आसपास नकारात्मक संख्याएं होती हैं।
लूकी

यह मेरे लिए जीवन रक्षक था। मैं fromIntegral (ceiling (int1 / int2))और अन्य चीजों के साथ कुश्ती कर रहा था - जिनमें से किसी ने मुझे वापस नहीं दिया Int, लेकिन इसने किया।
मफिनमैन मैन

10
divऋणात्मक असमानता की ओर गोल, शून्य नहीं।
लैकुनो

1

यहाँ मैंने अपना बनाने के लिए क्या किया है:

quot' a b
         | a<b = 0  -- base case
         | otherwise = 1 + quot' a-b b

2
एक व्यायाम के रूप में अच्छा है, लेकिन उत्पादन में बेकार है। बड़ी संख्या में यह धीमा (रैखिक समय) होता है और इसमें एक उच्च मेमोरी फ़ुटप्रिंट होता है (टेल-पुनरावर्ती नहीं)। नकारात्मक संख्याओं के लिए, यह या तो गलत है ( a<0) या कभी समाप्त नहीं होता है ( b<0)।
रुड हेल्डरमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.