我最近學習了一個haskell,並且一直有相當不錯的時間。我一直在通過一些Project Euler問題來掌握語法,並一直在回顧這裏發佈的解決方案http://www.haskell.org/haskellwiki/Euler_problems/1_to_10作爲學習工具。雖然我發現自己不能換我的頭張貼problem #3解決辦法:Haskell,瞭解euler的解決方案#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
似乎在互相呼叫建立自己的名單,並試圖遵循它醃我的大腦。任何人都知道關於這個解決方案的好博客文章,或者想在這裏寫一個關於它的解釋?
你見過的斐波那契數的遞歸定義? '的FIB = 1:1:zipWith(+)的FIB(尾的FIB)'?你明白嗎?這是一個以遞歸定義的數據開始的好地方。 – rampion 2012-02-07 18:58:01