Haskell'de elimi Euler Problem 4 deniyorum. İki üç haneli sayıyı çarparak oluşan en büyük palindromu sorar. Sorun yeterince basitti ve Haskell-fu'mın görevi üstlendiğini sanıyordum, ama en azından söylemek için tutarsız görünen bir sonuç elde ediyorum.Haskell'de Euler Problemi - Birisi Olabilir Hatam Hata Olabilir
İşte (kod basitti) benim palindrom dedektörü var: Buradan
isPalindrome :: String -> Bool
isPalindrome [] = True
isPalindrome str = let str2 = reverse str
in (str2 == str)
öyle bir ürün birinden birini çıkarmak için muhtemelen bir palindrom oluşturan (ve algılamak için bir işlev yazma basit bir soru çoğulların ve tekrarlamayan bir kaba kuvvet aramasının üzerinden tekrarlanır. İşte
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"
iki ayrı GHCi içinde çıkışlar vardır: İşte bu benim çok basitleştirilmiş versiyonu, aşağı sıyrılmış ve hata ayıklama için bir IO eylemi dönen var başka deyişle
*Main> isPalindrome $ show (999*999)
False
*Main> findPal 999 999
mult is 998001
, isPalindrome çağrısı her zaman yanlış olduğunda bile, FindPal'ın durum bildirisinde doğruyu değerlendirmek.
Burada neyi göremiyorum?
bir hakkım yok mu? – ephemient
Evet yaptım. Ne anlama geldiğini tam olarak bilmiyordum. Geriye doğru bakıldığında, açık. – rtperson