2016-09-01 9 views
6

में प्रिंट करते समय इंट के रूप में प्रारूप फ़्लोट करें यह हास्केल प्रोग्राम "1.0" प्रिंट करता है मैं इसे "1" प्रिंट करने के लिए कैसे प्राप्त कर सकता हूं?हास्केल

fact 0 = 1 
fact x = x * fact (x-1) 

place m n = (fact m)/(fact n) * (fact (m-n)) 

main = do 
    print (place 0 0) 
+4

_Don't_ कभी भी इस तरह से एनसीआर की गणना नहीं करता है। यह बेहद अक्षम है, क्योंकि फैक्टोरियल भारी शर्तों को उत्पन्न करता है जिसके परिणामस्वरूप वैसे भी रद्द हो जाएगा (यही कारण है कि आप सूत्र से सैद्धांतिक रूप से अभिन्न परिणाम प्राप्त करते हैं)। सही तरीका केवल गैर-रद्द करने वाले शब्दों को गुणा करना है, और कुछ भी विभाजित नहीं करना; तो आपको फ्लोटिंग पॉइंट के बारे में चिंता करने की आवश्यकता नहीं है। – leftaroundabout

+0

@ बाएंअराउंडबाउट, आप इसे उत्तर क्यों नहीं देते? – dfeuer

उत्तर

10

/ आपरेशन का उपयोग करके आप एक भिन्नात्मक डेटा प्रकार का उपयोग करने के Haskell पूछ रहे हैं। आप शायद इस मामले में नहीं चाहते हैं। Int या Integer जैसे अभिन्न प्रकार का उपयोग करना बेहतर है। तो मैं निम्नलिखित करने का सुझाव देता हूं: 1. fact फ़ंक्शन के लिए एक प्रकार की घोषणा जोड़ें, fact :: Integer -> Integer जैसे 2. / के बजाय quot का उपयोग करें।

तो अपने कोड इस तरह दिखना चाहिए:

fact :: Integer -> Integer 
fact 0 = 1 
fact x = x * fact (x-1) 

place :: Integer -> Integer -> Integer 
place m n = (fact m) `quot` (fact n) * (fact (m-n)) 

main = do 
    print (place 0 0) 

इसके अलावा, जैसा @leftaroundabout ने बताया, तो आप शायद उन द्विपद संख्या की गणना के लिए एक बेहतर एल्गोरिथ्म का उपयोग करना चाहते।

+0

उस फैक्टोरियल फॉर्मूला के साथ, आप _must_ 'इंटेगर' का उपयोग करते हैं, भले ही आप केवल छोटे इनपुट की अपेक्षा करते हों। – leftaroundabout

2

तुम बस round इस्तेमाल कर सकते हैं:

print (round $ place 0 0)

यह एक आप चाहते हैं स्वरूपण बदल जाता है। रेडनेब का जवाब, हालांकि, सही दृष्टिकोण है।