Недавно я начал учить себя хаскеллу и хорошо провожу время. Я работал над некоторыми проблемами 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
, кажется, звонят друг другу, чтобы составить свои собственные списки, и попытки следовать им заставляют мой мозг. Кто-нибудь знает хороший пост в блоге об этом решении или хочет написать здесь объяснение?