-1

primesHaskell がこの関数をどのように評価するかを理解するのはかなり難しいと思います。関数は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
4

2 に答える 2