haskell - 没有因使用 ' ... ' 而产生的 (RealFrac Int) 实例

标签 haskell types functional-programming

下面的程序应该检查输入 n 是否可以被 n 中的数字之和整除

module Harshad where

isHarshad :: Int -> Bool
isHarshad n = (mod n (sumDig n)) == 0)
 where 
  sumDig n 
   | (floor (n / 10) == 0) = n -- n consists of only one digit
   | otherwise = sumDig (floor (n / 10)) + floor (10*(n - floor (n / 10)))

我得到以下编译错误: * 没有因使用 `sumDig' 而产生的 (RealFrac Int) 实例

即使在尝试添加各种转换后,我仍然卡住了。

最佳答案

完全去掉小数,只使用 div对于整数除法:

sumDig n = if n < 10 then n -- n consists of only one digit
           else sumDig (n `div` 10) + (n `mod` 10)

关于haskell - 没有因使用 ' ... ' 而产生的 (RealFrac Int) 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42765318/

相关文章:

haskell - 从 OO 到 10,000 英尺的函数式编程

python - 一次通过过滤和未过滤的元素

haskell - jsonToRepJson 坏了吗?

haskell - 函数名称的别名具有不同的类型签名。为什么?

haskell - 管道和非管道代码之间的并发注意事项

scala 反射,使用 asInstanceOf 进行类型转换

haskell - 一棵单子(monad)玫瑰树可以有一个 MonadFix 实例吗?

types - # 符号在 f# 函数签名中是什么意思?

javascript - 如何使用 TypeScript 接口(interface)检查这三个值的类型?

javascript - 尝试重构此代码以仅使用不可变结构