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