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

Haskell递归修改LocalType列表时Prl字段提取出现变量未定义报错如何解决

错误原因
  • 你在守卫语句中使用x == (Prl s Bar ss)做相等判断,这一逻辑无法将Prl构造器的两个参数绑定到s、ss变量,Haskell只能通过模式匹配提取代数数据类型的字段值,因此触发了变量未定义的报错
  • 原有递归逻辑存在问题:遇到End时调用sepTimes (x:xs)会进入死循环,do块用法不符合纯列表处理的需求,也没有实现「ss追加到列表末尾」的逻辑
正确实现代码
sepTimes :: [LocalType] -> [LocalType]
sepTimes [] = []
-- 匹配End元素,直接保留
sepTimes (End : xs) = End : sepTimes xs
-- 匹配带Bar分隔符的Prl元素,s放当前位置,ss追加到结果末尾
sepTimes (Prl s Bar ss : xs) = s : sepTimes xs ++ [ss]
-- 如需处理Prl带其他分隔符的情况,可补充对应分支
逻辑验证

对应你给出的示例:

  1. 输入[End, Prl s Bar ss],处理后返回End : (s : [] ++ [ss]) = [End, s, ss],符合预期
  2. 输入[End, Prl End Bar End],处理后返回End : (End : [] ++ [End]) = [End, End, End],符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:10