मैं हास्केल में Euler Problem 4 पर अपना हाथ आजमा रहा हूं। यह दो सबसे बड़ी संख्याओं को गुणा करके गठित सबसे बड़ा पालिंड्रोम मांगता है। समस्या काफी सरल थी, और मैंने सोचा कि मेरा हास्केल-फ़ू कार्य तक था, लेकिन मुझे परिणाम मिल रहा है जो कम से कम कहने के लिए असंगत दिखता है।हास्केल में यूलर समस्या - क्या कोई मेरी त्रुटि स्पॉट कर सकता है
यहाँ मेरी विलोमपद डिटेक्टर (जो कोड के लिए सादगी ही था) है:
isPalindrome :: String -> Bool
isPalindrome [] = True
isPalindrome str = let str2 = reverse str
in (str2 == str)
यहाँ से यह है जब एक उत्पाद विलोमपद रूपों (और संभवतः एक से एक घटाना पता लगाने के लिए एक समारोह लिखने के एक साधारण सवाल मल्टीप्लिकैंड्स और ब्रूट-फोर्स सर्च पर रिकर्स अगर यह नहीं करता है)।
findPal :: Integer -> Integer -> IO()
findPal 1 y = putStrLn "reached 1"
findPal x y = let pal = isPalindrome $ show mult
mult = x * y
in case pal of
true -> putStrLn $ "mult is " ++ (show mult)
false -> putStrLn "pal is false"
यहाँ GHCi में दो अलग-अलग outputs हैं:: यहाँ मेरी इस बात का बहुत सरलीकृत संस्करण, नीचे छीन और डिबगिंग के लिए एक आईओ कार्रवाई लौटने है
*Main> isPalindrome $ show (999*999)
False
*Main> findPal 999 999
mult is 998001
दूसरे शब्दों में, isPalindrome करने के लिए कॉल हमेशा होता है findPal के केस स्टेटमेंट में सत्य का मूल्यांकन करना, भले ही यह गलत होना चाहिए।
मैं यहां क्या देख रहा हूं?
आप एक मत हो? – ephemient
हाँ मैंने किया। मैं बस पूरी तरह से यकीन नहीं था कि इसका क्या मतलब था। पूर्वदर्शी में, यह स्पष्ट है। – rtperson