You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell编写递归题目触发模式匹配不完整警告该如何解决?

问题原因

你的case表达式的模式匹配没有覆盖所有可能的输入情况,编译器警告明确提示缺失了仅含单个元素的列表[_]的匹配分支。
你当前仅覆盖了三种输入场景:

  • 空列表[]
  • 恰好包含两个元素的列表[x,y]
  • 长度大于等于3的列表x:y:xs
    当输入为长度1的列表时没有对应的匹配逻辑,因此触发了不完整模式匹配警告。
修复方法

补充单个元素列表的匹配分支即可,仅含单个元素的列表天然满足相邻元素差不超过1的要求,直接返回True:

continuous :: [Integer] -> Bool
continuous list = case list of 
            [] -> True
            [_] -> True -- 新增单个元素匹配分支
            [x,y] 
                 | abs (x-y) <= 1 -> True 
                 | otherwise -> False
            x:y:xs 
                | abs(x-y) <= 1 -> continuous (y:xs)
                | otherwise -> False
可选代码简化

实际上长度为2的列表分支可以和更长的列表分支合并,因为x:y:xs在xs为空时恰好对应双元素列表,简化后逻辑完全等价,写法更简洁:

continuous :: [Integer] -> Bool
continuous list = case list of 
            [] -> True
            [_] -> True
            x:y:xs -> abs (x - y) <= 1 && continuous (y:xs)

内容的提问来源于stack exchange,提问作者Rain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:06:03