【问题标题】:List comprehension and type problems (Haskell)列表理解和类型问题 (Haskell)
【发布时间】:2012-12-20 21:40:10
【问题描述】:

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

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)] 有什么问题。

谢谢(对不起我可怜的大脑)。

【问题讨论】:

标签: haskell types primes


【解决方案1】:

您将sqrtmodn 一起使用——前者需要浮点类型,后者需要整数类型。您可能想要后者,并改用sqrt (fromIntegral n)

其他一些不请自来的建议:

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

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

  • 不要使用length 来检查列表是否为空。在除数列表上改用null

【讨论】:

  • 非常感谢,它有帮助!还有一个问题:如何检查n &lt;- [2..]
  • @vortexxx192:检查什么?不明白你的意思。 n &lt;- [2..] 在列表理解中意味着 n 将从 2 开始计数,那里没有过滤器或检查...
猜你喜欢
  • 2013-01-28
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多