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.