列表理解和类型问题(Haskell)

时间:2012-12-20 21:40:10

标签: haskell types primes

我在以下构造中遇到恼人的语法错误:

isPrime n = if numOfDivisors n == 0 then True else False            
    where numOfDivisors n = length $ [x | x <- [2..ceiling (sqrt n)], n `mod` x == 0]

我该如何解决?我是Haskell的新手,所以我不知道[2..ceiling (sqrt n)]中有什么问题。

谢谢(抱歉我脑子不好)。

1 个答案:

答案 0 :(得分:10)

您同时使用sqrtmod n - 第一个需要浮点类型,后者需要整数类型。您可能想要后者,而是使用sqrt (fromIntegral n)

其他一些未经请求的建议:

  • 没有可能做if foo then True else False的理由。只需单独使用布尔表达式。

  • 函数参数在where子句的范围内,因此numOfDivisors不需要n作为参数。

  • 请勿使用length检查列表是否为空。请改为使用除数列表中的null