Haskell编程问题:计算列表总和后判断其是否可被指定数值整除
代码修正方案
现有代码的问题
/是Haskell的浮点数除法运算符,运算结果为浮点类型,无法直接作为if的判断条件(Haskell要求if的条件必须是Bool类型,不会做数值到布尔的隐式转换),编译阶段就会报错- 硬编码除数为5,不符合「可指定整除数值」的需求
if 条件 then True else False的写法冗余,直接返回条件本身的布尔值即可- 整除判断逻辑错误,你需要的是判断总和除以指定数的余数是否为0,而非做除法运算
正确实现代码
-- 可选显式写类型签名,也可以省略让Haskell自动推导 addDivide :: Integral a => a -> [a] -> Bool addDivide divisor list = sum list `mod` divisor == 0
如果需要处理除数为0的异常场景,可以加边界判断:
addDivide :: Integral a => a -> [a] -> Bool addDivide divisor list | divisor == 0 = error "除数不能为0" | otherwise = sum list `mod` divisor == 0
测试示例
你给出的用例addDivide 5 [5,5],计算过程为sum [5,5] = 10,10 mod 5 = 0,最终返回True,符合预期。
内容的提问来源于stack exchange,提问作者m1759
相关产品推荐
相关产品推荐

