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

Haskell编写友好数判断函数areAmicableNumbers出现类型错误如何修复?

错误原因
  • 类型签名错误:函数返回值标注为[Bool](布尔列表),但判断类函数实际应该返回单个Bool值。
  • 运算符操作数类型不匹配:&&逻辑与运算符仅支持Bool类型的左右操作数,你将两个比较表达式用方括号包裹后,结果变为单元素的[Bool]列表,和运算符要求的类型不符,因此直接触发编译错误。
  • 隐藏逻辑缺陷:现有代码计算约数的范围是[1..x],会把数字本身也计入约数,不符合友好数要求的「小于自身的所有约数之和」的定义,会导致计算结果错误。
修复方案

修改类型签名,去掉比较表达式外层的方括号,同时调整约数计算的范围,修复后的代码如下:

areAmicableNumbers ::  Integral a => a -> a -> Bool
areAmicableNumbers x y = 
   (sum [k | k <- [1..x-1], x `mod` k ==0]) == y
  && 
   (sum [i | i <- [1..y-1], y `mod` i ==0]) == x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:18:04