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函数来完成?怎么样?
我认为作业的目的是教你列表理解filter
和类似的结构,而不是让你编写测试素数的函数或以任何合理的方式创建除数列表.因此你需要的是一个谓词divides
,
divides :: Int -> Int -> Bool
a `divides` b = ???
Run Code Online (Sandbox Code Playgroud)
然后,您将该谓词用于filter
列表推导或列表推导中的参数,以查找除数列表,并使用该divisors
函数进行isPrime
测试.
您想要检查从1到n的所有数字,并且只有在它们除以n时才保留它们.该filter
功能可以帮助您:
divisors n = filter ??? [1..n]
Run Code Online (Sandbox Code Playgroud)
那你需要代替什么条件???
?
对于isPrime
可以重用该divisors
功能的功能,您已经提到了如何使用.