primes
Haskell がこの関数をどのように評価するかを理解するのはかなり難しいと思います。関数はprimes
何度も評価されますか、それとも関数primes
内のprimeFactors
は最初の を指しprimes
ますか?
primes = 2 : filter ((==1) . length . primeFactors) [3,5..]
primeFactors n = factor n primes
where
factor n (p:ps)
| p * p > n = [n]
| n `mod` p == 0 = p : factor (n `div` p) (p:ps)
| otherwise = factor n ps
main :: IO ()
main = print $ length . take 100000 $ primes