Haskell函数返回n的素因子

时间:2016-03-04 19:30:03

标签: haskell factors

我试图通过创建一些基本功能来学习Haskell。我目前正在尝试处理的函数称为primeFactors,它需要返回给定数字n的素因子列表。目前我有以下内容:

factors :: Integral a => a -> [a]
factors n = [x | x <- [1..n], n `mod` x == 0]

isPrime :: Integral a => a -> Bool
isPrime n = factors n == [1, n]

primeFactors :: Integral a => a -> [a]
primeFactors n = []

我想我应该使用前两个函数,但我不确定如何这样做。功能编程对我来说是全新的。

最后,如果我这样称呼它:primeFactors 10我希望它返回[5, 2]

感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用&#34;过滤器&#34;功能。它有这种类型:

filter :: (a -> Bool) -> [a] -> [a]

第一个参数是谓词,第二个参数是您要过滤的列表。结果是一个列表,其中仅包含谓词返回True的元素。因此,您可以编写以下任何内容:

primeFactors n = filter isPrime (factors n)

primeFactors n = filter isPrime $ factors n

primeFactors = filter isPrime . factors

第一个应该是自我解释的。第二个使用&#34; $&#34;运算符,它只是具有零优先级的函数应用程序。它通常用于删除尾随表达式中的括号。最后一个是在#34;无点&#34; style(术语来自拓扑:粗略地说一个点是一个变量)。 &#34;。&#34;运算符定义如下:

(f . g) x = f (g x)

如果你替换&#34;过滤isPrime&#34;为&#34; f&#34;和&#34;因素&#34;为&#34; g&#34;你会看到它是如何运作的。