我有項目歐拉question no. 74下面的遞歸函數:列表建設在Haskell
chain n | n `elem` xs = length xs
| otherwise = (chain (sumFac n)) : xs
fac n = foldl (*) 1 $ enumFromTo 1 n
sumFac n = sum $ map fac $ decToList n
除了我不知道正確的語法來構建上chain n
列表,以便它建立起來的xs
列表,並然後返回xs
的長度,一旦數字再次出現在xs
的列表中並開始循環。
我如何糾正我的鏈功能,使其工作?
我並不十分精通點自由符號的方式。有沒有比'$'更強大的語法糖之外的簡單解釋? – 2009-12-03 16:04:08
@Jonno:'\ x - > f(g x)'=='\ x - >(f。g)x' =='f。g' - 因此刪除了「點」「x」,使其無點。 – ephemient 2009-12-03 16:10:00
@gbacon:無論如何,你爲什麼需要視圖模式? '鏈n = let l =迭代sumFac n在$頭$ $過濾器(uncurry elem)$ zip l $ inits l' ...雖然我猜這不是無點。 – ephemient 2009-12-03 17:03:02