2009-09-09 15 views
10

मैं अभी भी नया हूं और फ़ंक्शन में उपयोग के लिए एक सूची बनाने की कोशिश कर रहा हूं और जितना संभव हो उतना छोटा रखना चाहता हूं जो लॉगबेस x y होता है। लेकिन मुझे लॉग इन करने में समस्या हो रही है जो मैं इस सूची में उपयोग कर सकता हूं।हास्केल फ़्लोट से इंट

[1 .. (logBase एक्स वाई)]

कोई सुझाव?

उत्तर

10

आप आपको मिल किस प्रकार त्रुटि पोस्ट नहीं है, लेकिन मुझे लगता है यह कुछ इस तरह है:

Prelude> let x = 2 
Prelude> let y = 7 
Prelude> [1 .. (logBase x y)] 

<interactive>:1:7: 
    No instance for (Floating Integer) 
     arising from a use of `logBase' at <interactive>:1:7-17 
    Possible fix: add an instance declaration for (Floating Integer) 
    In the expression: (logBase x y) 
    In the expression: [1 .. (logBase x y)] 
    In the definition of `it': it = [1 .. (logBase x y)] 

समस्या यह है कि यह है:

Prelude> :t logBase 
logBase :: (Floating a) => a -> a -> a 

फ्लोटिंग कक्षा में एक प्रकार रिटर्न , जबकि आपके प्रोग्राम में अन्य चर (1, 'x', 'y') अभिन्न प्रकार के हैं।

मुझे लगता है कि आप इंटीग्रर्स का अनुक्रम चाहते हैं?

Prelude> :set -XNoMonomorphismRestriction 
Prelude> let x = 2 
Prelude> let y = 42 
Prelude> [1 .. truncate (logBase x y)] 
[1,2,3,4,5] 

ट्रंकेट, सेलिंग या फर्श का उपयोग करें।

2

आप शायद कुछ प्रकार के गोलाकार, छिड़काव, मंजिल, या छत समारोह चाहते हैं। इंट्स और फ्लोट्स विभिन्न प्रकार हैं (जैसा आपने देखा है) और कंपाइलर आपको मिश्रण करने नहीं देगा। मुझे एक मिनट में एक संदर्भ मिलेगा।

8

शायद आप फ़ंक्शन सूची here में से एक चाहते हैं। Hoogle और Hayoo! इस तरह की चीज के लिए बहुत अच्छे उपकरण हैं क्योंकि वे आपको इच्छित फ़ंक्शन के प्रकार में डाल देते हैं और कार्यों की सूची वापस ले सकते हैं। हास्केल की समृद्ध प्रकार प्रणाली के साथ यह गतिशील रूप से टाइप की गई भाषाओं या सी या जावा जैसी स्थिर रूप से टाइप की गई भाषाओं की तुलना में बहुत उपयोगी टूल हो सकता है।

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