Я начинаю изучать Haskell используя the University of Pennsylvania's free online course materials. Они были помещены в сеть сознательно, поэтому я полагаю, что я не помогаю домашней работе, задавая этот вопрос.Соответствие шаблону Списки Haskell
Я получаю ряд ошибок компилятора из следующей функции, которую я использую, чтобы ответить на часть первого задания, и я не могу понять, почему. Моя функция:
doubleEveryOther :: [Integer] -> [Integer]
doubleEveryOther [] = []
doubleEveryOther [x] = [x]
doubleEveryOther [x:y] = [x:(y*2)]
doubleEveryOther [x:y:ys] = [x:y*2:doubleEveryOther ys]
Ошибки я получаю:
01.hs:18:19:
Couldn't match expected type ‘Integer’ with actual type ‘[a0]’
In the pattern: x : y
In the pattern: [x : y]
In an equation for ‘doubleEveryOther’:
doubleEveryOther [x : y] = [x : (y * 2)]
01.hs:18:27:
Couldn't match expected type ‘Integer’ with actual type ‘[a0]’
Relevant bindings include
y :: [a0] (bound at 01.hs:18:21)
x :: a0 (bound at 01.hs:18:19)
In the expression: x : (y * 2)
In the expression: [x : (y * 2)]
In an equation for ‘doubleEveryOther’:
doubleEveryOther [x : y] = [x : (y * 2)]
01.hs:19:19:
Couldn't match expected type ‘Integer’ with actual type ‘[Integer]’
In the pattern: x : y : ys
In the pattern: [x : y : ys]
In an equation for ‘doubleEveryOther’:
doubleEveryOther [x : y : ys] = [x : y * 2 : doubleEveryOther ys]
01.hs:19:30:
Couldn't match expected type ‘Integer’ with actual type ‘[Integer]’
In the expression: x : y * 2 : doubleEveryOther ys
In the expression: [x : y * 2 : doubleEveryOther ys]
In an equation for ‘doubleEveryOther’:
doubleEveryOther [x : y : ys] = [x : y * 2 : doubleEveryOther ys]
Может кто-нибудь помочь мне понять, почему мои модели не соответствующие правильные типы?
Слишком устал за полный ответ, извините, но следующий может дать вам идею: '[X, Y]', '(х: у : YS) '. – Zeta