Haskell实现populationBelow函数解决小数适配与非穷尽模式报错问题
函数修正方案
问题根因
- 类型适配问题:原函数签名限制了输入阈值、人口数值都为
Int整型,无法匹配示例中的浮点型人口数据,需要调整类型为支持小数的Double类型(也可添加Ord a约束实现任意可比较数值类型的通用适配)。 - 非穷尽模式报错:原递归逻辑缺少空列表的终止匹配分支,递归到列表末尾时无对应处理逻辑;同时
otherwise分支逻辑错误,会把不符合筛选条件的国家也加入结果列表。
修正后代码
-- 函数签名调整为支持浮点型数值 populationBelow :: Double -> [(String, Double)] -> [String] -- 新增空列表终止条件,解决非穷尽模式报错 populationBelow _ [] = [] populationBelow x ((name, pop):rest) | pop < x = name : populationBelow x rest -- 不符合条件的国家不加入结果,直接递归处理剩余元素 | otherwise = populationBelow x rest
效果验证
运行题目给出的两个测试用例,可得到预期返回结果:
- 阈值为10时返回
["Hungary", "Iceland", "Mongolia"] - 阈值为0时返回
[]
内容的提问来源于stack exchange,提问作者BeanieBarrow
相关产品推荐
相关产品推荐

