#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
также может представлять пустой список