Haskell - 求整数的除数

Amj*_*jad -9 haskell integer list

根据这本书,它是如何完成的,但我无法让它发挥作用.它给我一个错误不在范围内:'ld'.我猜我应该导入一些包但不确定哪一个.本书也在提示时使用GS模块,但我使用的是带有Prelude的WinGHCi.我在这里错过了什么?

factors :: Int -> [Int]
factors n | n < 1 = error "not positive"
          | n == 1 = []
          | otherwise = p : factors (div n p)
                        where p = ld n
Run Code Online (Sandbox Code Playgroud)

我想这也可以使用map和filter函数来完成?怎么样?

Dan*_*her 6

我认为作业的目的是教你列表理解filter和类似的结构,而不是让你编写测试素数的函数或以任何合理的方式创建除数列表.因此你需要的是一个谓词divides,

divides :: Int -> Int -> Bool
a `divides` b = ???
Run Code Online (Sandbox Code Playgroud)

然后,您将该谓词用于filter列表推导或列表推导中的参数,以查找除数列表,并使用该divisors函数进行isPrime测试.


Lan*_*dei 5

您想要检查从1到n的所有数字,并且只有在它们除以n时才保留它们.该filter功能可以帮助您:

divisors n = filter ??? [1..n]
Run Code Online (Sandbox Code Playgroud)

那你需要代替什么条件???

对于isPrime可以重用该divisors功能的功能,您已经提到了如何使用.