Haskell中如何判断列表与嵌套列表内子列表的长度是否不等
实现思路
你需要先拿到第一个输入列表的长度作为基准值,再逐个校验嵌套列表内每个子列表的长度是否和基准值一致:
- 只要存在任意一个子列表长度和基准值不同,直接返回错误信息
- 所有子列表校验通过则返回长度一致的信息
版本1:高阶函数简洁实现
直接用all高阶函数批量校验所有子列表,代码最简洁:
func :: [String] -> [[String]] -> String func keys nestedList | all (\sub -> length sub == baseLen) nestedList = "Lengths are the same" | otherwise = "Error different lengths found" where baseLen = length keys
版本2:模式匹配递归实现(符合你要求的模式匹配写法)
通过手动递归+模式匹配逐个处理子列表,逻辑更直观:
func :: [String] -> [[String]] -> String func keys nestedList = check baseLen nestedList where baseLen = length keys -- 模式匹配拆分嵌套列表 check _ [] = "Lengths are the same" -- 所有子列表处理完毕,全部符合要求 check len (curSub:restSubs) | length curSub /= len = "Error different lengths found" -- 遇到长度不匹配的子列表,直接返回错误 | otherwise = check len restSubs -- 当前子列表符合要求,继续校验剩余子列表
示例验证
你给出的测试输入["Planet", "City"] [["Jupiter", "Earth"], ["Berlin", "Madrid", "Krakow"]],基准长度为2,第二个子列表长度为3,校验时会直接触发错误分支,返回结果和你预期完全一致。
内容的提问来源于stack exchange,提问作者program.exe
相关产品推荐
相关产品推荐

