使用 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 是您可以在支票中使用的最后一位数字。