Haskell如何忽略Int与Integer类型差异实现整除判断?
解决方法
首先纠正两个核心问题:
1. 类型约束的语法错误
你写的all a. Num => a是错误的Haskell语法,正确的类型约束写法是(类型类 a) =>,比如针对整数类型的(Integral a) =>。
2. 类型类选择错误
Num类型类包含了浮点数(比如Float、Double),这类类型的整除语义和整数不一致,而你的输入都是整数类型(Int、Integer),应该用Integral类型类——它是所有整数类型的父类,Int和Integer都是它的实例,还提供了mod、div这类整数专属操作。
正确实现代码
isDivisible :: (Integral a) => a -> a -> Bool isDivisible x y = y /= 0 && x `mod` y == 0
代码说明:
Integral a约束确保参数x和y是整数类型(Int、Integer都符合要求)- 先判断
y /= 0,避免除数为0的运行时错误 xmody == 0通过取余结果是否为0,判断x能否被y整除
测试示例:
-- Int类型测试 isDivisible 10 2 -- 返回True isDivisible 7 3 -- 返回False -- Integer类型测试 isDivisible 1000000000000 100 -- 返回True
内容的提问来源于stack exchange,提问作者kilimanjaro3322
相关产品推荐
相关产品推荐

