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

不使用length函数判断列表长度是否为偶数的Haskell实现排错

问题原因

你的代码错误出在最后一条递归分支的逻辑:没有按照提示要求两个两个遍历列表,而是每次仅移除第一个元素再递归,长度超过4的列表无法匹配前面的固定长度分支,自然返回错误结果。另外也没有必要枚举所有短长度的匹配分支,仅保留基础边界即可。

修复后代码

isLengthEven :: [a] -> Bool
-- 空列表按题目要求返回False
isLengthEven [] = False
-- 长度为1返回False
isLengthEven [_] = False
-- 长度为2返回True
isLengthEven [_, _] = True
-- 每次移除前两个元素,递归判断剩余列表
isLengthEven (_:_:rest) = isLengthEven rest

逻辑说明

递归分支每次直接跳过前两个元素,完全符合题目要求的遍历规则,不管列表长度多大都可以正确判断:

  • 长度为4的列表:移除前两个后剩余长度为2,匹配第三条分支返回True,和示例isLengthEven "Even" == True一致
  • 长度为6的列表:两次移除前两个后剩余长度为2,返回True
  • 长度为3/5的列表:递归到最后剩余长度为1,返回False

如果你的需求中边界返回值有调整,仅需要修改前三条边界分支的返回值即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:45:03