嗯...为什么在评估任何整数时,此函数以无限循环结束> 3?
smallestMultiple n = factors [2..n] where
factors [] = []
factors (h:xs) = h:(factors $ filter ((<)1) [div x h|x<-xs])
where
div x y
|x `mod` y ==0 = x `div` y
|otherwise = x
答案 0 :(得分:5)
主要问题似乎是您定义了div
的本地版本:
div x y
| x `mod` y == 0 = x `div` y
| otherwise = x
由于where
子句(以及let
)中的绑定是递归的,因此第一个案例右侧的div
引用相同的div
你正在定义!您可以使用其他名称来解决此问题,例如div'
:
div' x y
| x `mod` y == 0 = x `div` y
| otherwise = x