我正在学习函数式编程。我已经理解了原理,现在我尝试学习具体细节。这段代码应该找出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 ]
答案 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
整除;如果是,x
是n
的因子。