
Wysłane z telefonu Samsung
-------- Oryginalna wiadomość --------
Od: Roelof Wobben
Roelof,
Maybe it's better to reuse toDigits in sumDigits.
Kees
-----Oorspronkelijk bericht----- Van: Beginners [mailto:beginners-bounces@haskell.org] Namens Roelof Wobben Verzonden: zaterdag 7 februari 2015 10:37 Aan: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell Onderwerp: [Haskell-beginners] any feedback on this solution
Hello,
I finally solved exercise 1 where I had to write a programm which checks if a creditcard number is valid.
I solved it this way :
toDigits :: Integer -> [Integer] toDigits n | n < 0 = [] | n < 10 = [n] | otherwise = toDigits (n `div` 10) ++ [n `mod` 10]
-- | convert a number to a reversed array where a negative number will be a empty array toDigitsRev :: Integer -> [Integer] toDigitsRev 0 = [0] toDigitsRev n | n < 0 = [] | n < 10 = [n] | otherwise = n `mod` 10 : toDigitsRev (n `div` 10)
-- | Doubles every second number from the right. doubleEveryOther :: [Integer] -> [Integer] doubleEveryOther [] = [] doubleEveryOther (x:[]) = [x] doubleEveryOther (x:(y:zs)) | length (x:(y:zs)) `mod` 2 /= 0 = [x] ++ (y * 2) : doubleEveryOther zs | otherwise = [x *2] ++ y : doubleEveryOther zs
-- | sum all the digits of a array sumDigits :: [Integer] -> Integer sumDigits [] = 0 sumDigits (x:zs) | x < 10 = x + sumDigits zs | otherwise = x `mod` 10 + x `div` 10 + sumDigits zs
-- | validate a number by looking if a number can be divided by 10 validate :: Integer -> Bool validate n = sumDigits(doubleEveryOther(toDigits(n))) `mod` 10 == 0
-- | The main entry point. main :: IO () main = do print $ validate 4012888888881881
Any remarks about this solution.
I know there are higher function solutions but that part is not descrived in chapter 1 .
Roelof
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
----- No virus found in this message. Checked by AVG - www.avg.com Version: 2015.0.5646 / Virus Database: 4281/9071 - Release Date: 02/07/15
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners ----- No virus found in this message. Checked by AVG - www.avg.com Version: 2015.0.5646 / Virus Database: 4281/9071 - Release Date: 02/07/15 _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners