使用Haskell的ISBN-13数字检查

我刚刚开始使用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,1,3,5,4,6,9 ]

应返回True

我已经尝试了几个小时,但是我在Haskell上还不够好,这让我感到困惑。有人可以指出我正确的方向吗?我对Haskell不太了解,这是主要问题。

zqstella 回答:使用Haskell的ISBN-13数字检查

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

本文链接:https://www.f2er.com/3158950.html

大家都在问