确定因子指数

时间:2018-06-14 10:40:24

标签: haskell floating-point

我遇到了这段代码的编译问题,但我们真的不知道为什么。

有什么想法?

--divisorCount :: Int -> Int -> Int -> Int 
    divisorCount numer denom counter 
        | numer `mod` denom == 0 = divisorCount (floor(numer / denom)) denom (counter+1)
        | otherwise = -1

2 个答案:

答案 0 :(得分:2)

您的numerdenom必须同时为IntegralmodFractional/。这是不可能的。

但是,通过在分割前转换fromIntegral或通过truncate(或使用roundceiling轻松修复, floor之前的mod。{/ p>

或者你可以简单地使用div,就像@Willem建议的那样。

答案 1 :(得分:0)

检查出来

divisorCount numer denom counter
    | (q, 0) <- numer `divMod` denom = divisorCount q denom (counter+1)
    | otherwise = -1