recaList :: [Int] -> [Int]
recaList [] = []
recaList [x] = map recaMan [x]
Это совпадает с пустыми списками и списками, содержащими один элемент.Вам не удалось сопоставить ни один список, содержащий два или более элементов.Я полагаю, что вы имели в виду
recaList :: [Int] -> [Int]
recaList [] = []
recaList xs = map recaMan xs
Нет необходимости в скобках.Однако map
вернет пустой список, если он будет задан в качестве входных данных, поэтому ваш первый случай также не нужен.Хотя приведенный выше фрагмент кода будет работать, он будет более идиоматическим.
recaList :: [Int] -> [Int]
recaList xs = map recaMan xs
Что касается вашего вопроса о том, что означает синтаксис ошибки, :
- оператор построения списка, поэтому (x:xs)
соответствует любому непустому списку, привязывая первый элемент к x
, а остальные к xs
.(x:y:ys)
делает то же самое, но первое связывается с x
, второе с y
, а остальное с ys
.Подчеркивание просто указывает на игнорируемое значение, поэтому (_:_:_)
соответствует любому списку, по крайней мере, из двух элементов.Компилятор сообщает вам, что вы не смогли сопоставить этот случай.