我在以下构造中遇到恼人的语法错误:
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)]
中有什么问题。
谢谢(抱歉我脑子不好)。
答案 0 :(得分:10)
您同时使用sqrt
和mod
n
- 第一个需要浮点类型,后者需要整数类型。您可能想要后者,而是使用sqrt (fromIntegral n)
。
其他一些未经请求的建议:
没有可能做if foo then True else False
的理由。只需单独使用布尔表达式。
函数参数在where
子句的范围内,因此numOfDivisors
不需要n
作为参数。
请勿使用length
检查列表是否为空。请改为使用除数列表中的null
。