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

Haskell问题排查:无模式匹配的线性递归元素存在判断函数错误

你的代码存在三个核心问题:
  • 违反「无模式匹配」的要求:你定义函数时使用了(x:xs)的列表模式匹配,不符合题目指定的实现规则。
  • 空列表场景未处理:当传入空列表[]时,函数没有对应的定义分支,会触发非穷尽模式的运行时错误。
  • 单元素列表判断逻辑错误:当列表仅有一个元素(如[5])时,null xs结果为True,会直接返回False——哪怕这个元素就是要查找的y,也会得到错误结果。

符合要求的修正代码

完全采用守卫(guard)实现线性递归,无任何模式匹配:

isPresentRecNonPM :: Int -> [Int] -> Bool
isPresentRecNonPM y lst
  | null lst = False          -- 空列表中不可能存在目标元素
  | y == head lst = True      -- 匹配当前列表的第一个元素
  | otherwise = isPresentRecNonPM y (tail lst)  -- 递归遍历剩余元素

代码说明

  1. 用null lst判断空列表,直接返回False,覆盖了所有边界场景;
  2. 用head lst获取当前列表首元素,避免模式匹配;
  3. 递归调用时用tail lst传入剩余列表,实现线性遍历逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:17:03