diff --git a/luhn.lhs b/luhn.lhs deleted file mode 100644 index fb5901d..0000000 --- a/luhn.lhs +++ /dev/null @@ -1,43 +0,0 @@ -This is an implementation of the Luhn Algorithm. It's used to validate -credit card numbers. - -Return the last digit of an integer number - -> lastDigit :: Integer -> Integer -> lastDigit n = mod n 10 - -Remove the last digit of an integer number and return the rest - -> dropLastDigit :: Integer -> Integer -> dropLastDigit n = div n 10 - -Put all digits of an integer number in reverse order into a list - -> toRevDigits :: Integer -> [Integer] -> toRevDigits n -> | n < 1 = [] -> | otherwise = lastDigit(n) : toRevDigits(dropLastDigit(n)) - -Put all digits of an integer number into a list - -> toDigits :: Integer -> [Integer] -> toDigits n = reverse(toRevDigits(n)) - -Double every second value in the input list. - -> doubleEveryOther :: [Integer] -> [Integer] -> doubleEveryOther([]) = [] -> doubleEveryOther(x:[]) = [x] -> doubleEveryOther(a:(b:xs)) = a : 2*b : doubleEveryOther(xs) - -Sum up all digits from all integers. - -> sumDigits :: [Integer] -> Integer -> sumDigits([]) = 0 -> sumDigits(0:xs) = sumDigits(xs) -> sumDigits(x:xs) = lastDigit(x) + sumDigits(dropLastDigit(x) : xs) - -Evaluate if a credit card number is 'valid'. - -> luhn :: Integer -> Bool -> luhn x = lastDigit(sumDigits(doubleEveryOther(toRevDigits(x)))) == 0