У меня есть следующие рекурсивная функция для проекта Euler 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
и начинает цикл.
Как исправить мою функцию цепи, чтобы она работала?
Я не очень хорошо разбираюсь в способах бесплатной нотации. Есть ли простое объяснение, кроме синтаксического сахара, более мощного, чем '$'? –
@Jonno: '\ x -> f (g x)' == '\ x -> (f. G) x' ==' f.g' - следовательно, удаляя «точку» 'x', делая ее без точек. – ephemient
@gbacon: Почему вам нужен шаблон представления, так или иначе? 'цепочка n = let l = итерация sumFac n в snd $ head $ filter (uncurry elem) $ zip l $ inits l' ... хотя я думаю, что это не точечно. – ephemient