Я только начал функциональное программирование, используя 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 ]
должен вернуться True
Я пытался сделать это в течение нескольких часов, но я еще не достаточно хорош в Хаскеле, и это меня смущает. Может ли кто-нибудь указать мне правильное направление? Я не знаю много о Haskell, который является главной проблемой.