Я пишу очень простую функцию репликации, которая берет список номеров и возвращает список с каждым дублированием. Функция репликации, которая принимает значение и элемент, для меня более тривиальна, поскольку она не требует сохранения состояния.Любой способ сохранить значения в Haskell?
Но в Haskell, я получил это до сих пор:
> replicate' [] = []
> replicate' (x:xs)
> | x == 1 = x: replicate' xs
> | otherwise = x: replicate'(x-1:xs)
, который, очевидно, неправильно, так как для replicate' [2,2]
, было бы напечатать [2,1,2,1]
вместо [2,2,2,2]
Я знаю, что я должен сохранить х в некоторые другие переменные и уменьшают его, но я не верю, что знаю синтаксис для этого.
Упс, люди немного смутились с вопросом.
Например, вызов replicate' [2,3,1]
должен вернуться [2,2,3,3,3,1]
, а не только [2,2,3,3,1,1]
, как я думаю, что вы, ребята, думаете
Написание вашей проблемы, безусловно, является хорошим первым шагом к ее решению. Например: «' replicate'' в списке '(x: xs)' есть (число 'x' в начале списка, повторяющееся' x' раз), добавленное к (хвост списка 'replicate'' -ed)». Если мы укажем проблему на _declarative_ way (описывая, что наши функции _are_), мы получаем что-то, что мы можем перевести непосредственно в haskell (заменить «is» на '='). – jberryman