使用 Haskell 进行 ISBN-13 数字校验
ISBN-13 digit check using Haskell
我刚开始使用 Haskell 进行函数式编程,我想编写一个简短的函数来检查 13 位代码并检查它是否是 ISBN 编号。
检查的公式是:
x13 = (10 − ((x1 + 3x2 +x3 + 3x4 +x5 + 3x6 +x7 + 3x8 +x9 + 3x10 +x11 + 3x12)%10))%10
(x1
是第一个数字,x2
第二个数字,...,x13
最后一个数字等)
我希望输入是一个列表,这样对我来说更容易(13 个整数,每个 0-9)。
所以像这样(下面的内容是简化的):
isValid :: [Int] -> Bool
--isValid = True if (lastdigit = formula) -- can this be done in one (long) line?
因此,例如:
isValid [ 9, 7, 8, 0, 1, 3, 7, 0, 5, 3, 4, 6, 9 ]
应该returnTrue
几个小时以来我一直在尝试这样做,但我在 Haskell 方面还不够好,这让我感到困惑。有人能指出我正确的方向吗?我对Haskell了解不多,这是主要问题
您可以只对包含 13 个元素的列表进行模式匹配,例如:
isValid :: [Int] -> Bool
isValid [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13] = …
isValid _ = False
和…
你还需要填写的部分。提示:你可以使用mod :: Integral a => a -> a -> a
来计算模数(在一些编程语言中是用%
完成的)。
因此,x13
是您可以在支票中使用的最后一位数字。
我刚开始使用 Haskell 进行函数式编程,我想编写一个简短的函数来检查 13 位代码并检查它是否是 ISBN 编号。
检查的公式是:
x13 = (10 − ((x1 + 3x2 +x3 + 3x4 +x5 + 3x6 +x7 + 3x8 +x9 + 3x10 +x11 + 3x12)%10))%10
(x1
是第一个数字,x2
第二个数字,...,x13
最后一个数字等)
我希望输入是一个列表,这样对我来说更容易(13 个整数,每个 0-9)。
所以像这样(下面的内容是简化的):
isValid :: [Int] -> Bool
--isValid = True if (lastdigit = formula) -- can this be done in one (long) line?
因此,例如:
isValid [ 9, 7, 8, 0, 1, 3, 7, 0, 5, 3, 4, 6, 9 ]
应该returnTrue
几个小时以来我一直在尝试这样做,但我在 Haskell 方面还不够好,这让我感到困惑。有人能指出我正确的方向吗?我对Haskell了解不多,这是主要问题
您可以只对包含 13 个元素的列表进行模式匹配,例如:
isValid :: [Int] -> Bool
isValid [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13] = …
isValid _ = False
和…
你还需要填写的部分。提示:你可以使用mod :: Integral a => a -> a -> a
来计算模数(在一些编程语言中是用%
完成的)。
因此,x13
是您可以在支票中使用的最后一位数字。