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

Haskell中Matrix的valid函数判断异常:输入[[]]返回True

问题分析与修复方案

你的valid函数目前只实现了两个校验条件:所有行的长度一致、矩阵至少包含一行,但缺少了“列数至少为1”的关键检查,这就是为什么valid [[]]会返回True。

为什么当前代码不符合预期?

当输入[[]]时:

  • [length x | x <- [[]]]生成列表[0],uniform [0]返回True(单个元素的列表天然满足长度均匀的要求)
  • length [[]] >= 1的结果是True
  • 两个条件通过逻辑与结合后,最终返回True,但[[]]是一个仅含一行、列数为0的矩阵,并不符合你“至少一行一列”的要求。

修复后的代码

你需要添加校验,确保每一行都不为空(即列数≥1)。由于已经通过uniform保证了所有行长度一致,直接校验所有行都非空即可:

type Matrix = [[Rational]]

valid :: Matrix -> Bool
valid xs = length xs >= 1 && uniform [length x | x <- xs] && all (not . null) xs

修复后的逻辑说明

  • length xs >= 1:确保矩阵至少包含一行
  • uniform [length x | x <- xs]:确保所有行的长度相同(列数一致)
  • all (not . null) xs:确保每一行都不为空(列数至少为1)

此时调用valid [[]]会返回False,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:20:26