Haskell, понимание решения для Эйлера №3

Недавно я начал учить себя хаскеллу и хорошо провожу время. Я работал над некоторыми проблемами Project Euler, чтобы понять синтаксис, и просматривал решения, размещенные здесь http://www.haskell.org/haskellwiki/Euler_problems/1_to_10 в качестве обучающего инструмента. . Хотя я обнаружил, что не могу осмыслить решение, опубликованное для проблемы №3 :

-- Find the largest prime factor of 317584931803. 

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

problem_3 = last (primeFactors 317584931803)

Я не могу понять всю жизнь, как это работает. простые числа и primeFactors , кажется, звонят друг другу, чтобы составить свои собственные списки, и попытки следовать им заставляют мой мозг. Кто-нибудь знает хороший пост в блоге об этом решении или хочет написать здесь объяснение?

16
задан Martijn Pieters 22 January 2015 в 17:46
поделиться