【发布时间】:2016-05-17 06:02:24
【问题描述】:
我在 Haskell 学习。
我一直在实现一个生成除数列表的函数。
我的第一个代码在这里:
代码:
divisors :: Integral a => a -> [a]
divisors n
| n < 1 = []
| otherwise = filter ((== 0) . (mod n)) [1..n]
此代码与Making a list of divisors in Haskell几乎相同。
它可以工作,但速度很慢。
我觉得除以[1..n]中的每一个都没有效率。
是否有另一种聪明的方法来制作除数列表?
更新:
在n < 1的情况下,[1..n]与[]相同。
因此,根本不需要守卫:
divisors :: Integral a => a -> [a]
divisors n = filter ((== 0) . (mod n)) [1..n]
【问题讨论】: