2009-11-18 14 views
8

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?

+0

bir hakkım yok mu? – ephemient

+0

Evet yaptım. Ne anlama geldiğini tam olarak bilmiyordum. Geriye doğru bakıldığında, açık. – rtperson

cevap

13

"Doğru" ve "Yanlış" ı büyük harflerle yazmanız gerektiğini düşünüyorum. Ben kullanışlı bir Haskell tercüman yok ama muhtemelen sadece yeni bir "pal"

+0

Bu işe yaradı. Teşekkür ederim! (Bunun gibi küçük bir şey olduğunu biliyordum, ama vay, beynimin sadece iki boyu küçülttüğünü hissediyorum ...) – rtperson

+0

Sadece bunu biliyordum çünkü ben de kendim yaptım. ;) –

6

o findPal o de olabilir, sen True yazmalısın eşit olacak şekilde değişken "doğru" ve False yerine true ve false ait ilan edilir ?

DÜZENLEME: ": bindirilir Desen maç (ler) Uyarı" Tamam, iyice burada erken kuş tarafından dövüldü ...

İlgili konular