我在理解此代码的语法时遇到问题。有人可以逐行解释吗?

时间:2016-01-28 00:19:05

标签: haskell functional-programming

我正在学习函数式编程。我已经理解了原理,现在我尝试学习具体细节。这段代码应该找出n是否是素数。我不明白第一行是做什么的。我建议它想要一个整数作为函数中的布尔值(你称之为?)'isPrime'。

第2行到第4行是某种类型的实现,相当于n / x的模数为零,其中x向上计数,不包括n作为因子。

请帮我解决这个问题。 提前谢谢你。

问题代码:

isPrime :: Integer -> Bool
isPrime n = (factors n == []) -- (1)
  where
factors n = [ x | x <- [2..n-1], n `mod` x == 0 ] 

1 个答案:

答案 0 :(得分:2)

isPrime :: Integer -> Bool

是一种类型签名。它声明isPrime是一个接受Integer并返回Bool的函数。

isPrime n = (factors n == [])

(factors n == [])isPrime定义的主体。 isPrime接受一个参数n,然后调用factors n以查看它是否等于空列表。也就是说,如果n没有因素,那么它就是素数。

where

只是设置factors的定义,所以它的范围基本上是isPrime

factors n = [ x | x <- [2..n-1], n `mod` x == 0 ]

是这个程序真正的肉食,所以它做的最多。首先,factors只接受一个参数n。然后使用列表推导构建列表。

[ x | x <- [2..n-1], n `mod` x == 0 ]

可以读作&#34;从2到n - 1的整数列表x,这样n除以x就不会产生余数&#34;。这基本上是检查n是否可被x整除;如果是,xn因子