नहीं है इसलिए मैं Problem 31 पर काम कर रहा हूं।फ़ंक्शन `(y * y) <x 'दो तर्कों पर लागू होता है, लेकिन इसके प्रकार' बूल 'में
मैं उम्मीद निर्धारित करने के लिए निम्नलिखित समारोह लिखा है, इसकी एक नंबर एक प्रमुख है:
isPrime :: Integer -> Bool
isPrime x = prime x 2
where
prime :: Integer -> Integer -> Bool
prime x y | ((y*y) < x) and ((x `mod` y) /= 0) = prime x (y+1)
| ((y*y) >= x) = True
| otherwise = False
मेरे तर्क एक isPrime
कार्य करना है, और 2 पैरामीटर, स्टोर करने के लिए isPrime
prime
कहा जाता है के भीतर एक कार्य हो रहा था संख्या मैं यह देखने के लिए जांचना चाहता हूं कि यह प्राइम (x
) है और x के sqrt से नीचे की सभी संख्याओं को जांचने के लिए एक पुनरावर्तक है और देखें कि क्या वे x
विभाजित करते हैं।
| ((y*y) < x) and ((x `mod` y) == 0) = prime x (y+1)
इस लाइन का कहना है कि माना जाता है: prime
3 गार्ड है संख्या मैं एक्स (((y*y) < x)
) का वर्गमूल से भी कम समय से पारित कर दिया और अगर यह होता है की जाँच x
से विभाज्य है अगर y
(((x
आधुनिक y) /= 0)
) , यदि यह नहीं है तो मैं उच्च संख्या के साथ फिर से जांचने के लिए रिकर्सन और वृद्धि वाई का उपयोग करता हूं।
यह पंक्ति:
| ((y*y) >= x) = True
की तरह अगर वर्गमूल नीचे सभी नंबरों को किसी भी प्रकार से एक्स विभाजित न करना माना जाता है, एक्स प्रधानमंत्री होना चाहिए।
अंत में, इस लाइन:
| otherwise = False
मतलब यह है कि एक नंबर कहीं रेखा के साथ एक नंबर विभाजित एक्स तो यह प्रधानमंत्री नहीं है।
मैंने सोचा कि मैंने जो कोड लिखा है, वह मुझे समझ में आया है, मुझे पता है कि यह सबसे कुशल नहीं है, क्योंकि मैं केवल एसकर्ट एक्स के नीचे प्राइम देख सकता हूं और एसकर्ट एक्स के नीचे की सभी संख्या नहीं, लेकिन वैसे भी, मुझे इसके साथ समस्याएं आ रही हैं बयान:
((y*y) < x)
GHCi का कहना है:
The function `(y * y) < x' is applied to two arguments, but its type `Bool' has none
मैंने सोचा था कि <
दो तर्क में लेने के लिए और एक बूल, त्रुटि संदेश वास्तव में मेरे लिए कोई मतलब नहीं है वापस जाने के लिए चाहिए था। क्या आप मुझे यह समझने में मदद कर सकते हैं कि मैं क्या गलत कर रहा हूं? धन्यवाद।
अब त्वरित संपादन मैं इसे चलाने के लिए मिल गया है कि, इस लाइन:
| ((y*y) >= x) = True
होना चाहिए:
| ((y*y) > x) = True
उर्फ। किसी को पता है कि एसओ पर बैकटिक्स के अंदर बैकटिक्स कैसे शामिल करें? मैं उनसे बचने के लिए प्रतीत नहीं कर सकता। – porges
'&&' 'लॉजिकल और "के लिए फ़ंक्शन है, जिसमें' बूल -> बूल -> बूल 'टाइप किया गया है। 'और 'टाइप' [बूल] -> बूल 'के साथ एक समान कार्य है, इसलिए इसके चारों ओर बैकटिक्स डालने से यहां कोई मदद नहीं होगी। – Ben
@Porges: आपके लिए तय किया गया है। जहां तक मुझे पता है, आपको बैकस्लैश-एस्केक्ड बैकटिक्स के साथ '
...
' का उपयोग करने की आवश्यकता है। –