Предупреждение появляется после того, как я решу вопрос о рекурсии в Haskell

#list #haskell #recursion

Вопрос:

Я пытаюсь реализовать кодовый вопрос ниже, но получил предупреждение такого типа. Я не знаю, что произошло, так как я мог правильно вывести ответ. Ниже приведен мой код и предупреждение:

 continuous :: [Integer] -gt; Bool continuous list = case list of   [] -gt; True  [x,y]   | abs (x-y) lt;= 1 -gt; True   | otherwise -gt; False  x:y:xs   | abs(x-y) lt;= 1 -gt; continuous (y:xs)  | otherwise -gt; False  Lists.hs:43:19: warning: [-Wincomplete-patterns] Pattern match(es) are non-exhaustive In a case alternative: Patterns not matched: [_]  | 43 | continuous list = case list of   | ^^^^^^^^^^^^^...  

Ответ №1:

В предупреждении отмечается, что ваше сопоставление с шаблоном не является исчерпывающим, так как, например, вы пропускаете случай для списка с одним элементом [x] .

Кроме того, если вы добавляете обращение для одного элемента, обращение [x,y] больше не требуется, так как оно также обрабатывается обращением x:y:xs , поскольку xs также может представлять пустой список