Haskell 函数 returns n 的质因数

Haskell function that returns prime factors of n

我正在尝试通过创建一些基本函数来学习 Haskell。我目前正在尝试处理的函数称为 primeFactors,它需要 return 给定数字 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 我希望它 return [5, 2]

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

您可以使用"filter"函数。它有这种类型:

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

第一个参数是谓词,第二个参数是您要过滤的列表。结果是一个列表,仅包含谓词 returns 为真的那些元素。所以你可以这样写:

primeFactors n = filter isPrime (factors n)

primeFactors n = filter isPrime $ factors n

primeFactors = filter isPrime . factors

第一个应该是不言自明的。第二个使用“$”运算符,它只是具有零优先级的函数应用程序。它通常用于去除尾随表达式中的括号。最后一种是 "point-free" 风格(这个术语来自拓扑学:粗略地说一个点是一个变量)。这 ”。”运算符定义如下:

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

如果您将 "filter isPrime" 替换为 "f",将 "factors" 替换为 "g",您将看到它是如何工作的。