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

Haskell递归处理嵌套列表触发Non-exhaustive patterns报错如何解决

问题原因解释

你遇到的非穷尽模式异常和子列表是否为空无关,核心问题是递归函数缺少外层空列表的终止匹配分支:

  • 当前你只定义了multiply (x:xs)的匹配规则,仅适用于非空的外层嵌套列表
  • 递归执行到最后外层列表被遍历完、剩余空列表[]时,没有对应的处理分支,因此抛出异常
  • 你运行代码时已经输出了空子列表[],说明列表推导语法已经自动支持处理空子列表的场景,不需要额外修改子列表的处理逻辑。
修复方案

最简递归修复

补全空列表的终止匹配分支即可:

list = [[1, 3, 6.7, 7.0], [], [1, 8.22, 9, 0]]

-- 补全空列表匹配的终止条件
multiply [] = []
multiply (x:xs) = [n * (-1) | n <- x] : multiply xs

运行后即可得到正确结果,不会抛出异常。

更简洁的函数式写法

你可以直接用高阶函数map实现嵌套遍历,不需要手动写递归,也不会出现递归终止条件漏写的问题:

multiply = map (map (* (-1)))

外层map遍历外层列表的每个子列表,内层map遍历子列表的每个元素,执行乘-1的操作,逻辑和手动递归完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:09:00