我遇到了这段代码的编译问题,但我们真的不知道为什么。
有什么想法?
--divisorCount :: Int -> Int -> Int -> Int
divisorCount numer denom counter
| numer `mod` denom == 0 = divisorCount (floor(numer / denom)) denom (counter+1)
| otherwise = -1
答案 0 :(得分:2)
您的numer
和denom
必须同时为Integral
,mod
和Fractional
,/
。这是不可能的。
但是,通过在分割前转换fromIntegral
或通过truncate
(或使用round
,ceiling
轻松修复, floor
之前的mod
。{/ p>
或者你可以简单地使用div
,就像@Willem建议的那样。
答案 1 :(得分:0)
检查出来
divisorCount numer denom counter
| (q, 0) <- numer `divMod` denom = divisorCount q denom (counter+1)
| otherwise = -1