
22 Oct
2002
22 Oct
'02
5:22 p.m.
Tim Otten writes: : | Can anyone suggest why the tighter algorithm exhibits significantly | worse performance? Is takeWhile significicantly more expensive than | take? No. | Is the \z lambda expression expensive? No. | The intsqrt isn't recalculated each time takeWhile evalutes a | prime, is it? Probably. Try replacing this (\z -> z <= (intsqrt x)) with this (\z -> z^2 <= x) or moving the O(sqrt(n)) step[1] into a let expression let zmax = intsqrt x in ... (\z -> z <= zmax) ... | Slightly confused, | Tim Otten | | [1] Note that intsqrt calculates the floor of the square root of x. | intsqrt x = intsqrt' 1 x | intsqrt' n x | | (n*n > x) = n-1 | | otherwise = intsqrt' (n+1) x