Я реализую преобразование Burrows-Wheeler в Haskell. Комбинация всех циклических строк генерируется и сохраняется в матрице в качестве первого шага преобразования. Я использую Haskell List для построения матрицы. Список сохранит исходное слово в заголовке списка и его циклические комбинации в хвосте.Изменение и добавление к списку в Haskell
Here is an Example of a transformed word
Я написал функцию, которая выводит первую строку циклически. Однако, если я снова вызову функцию как рекурсию, я столкнулся с бесконечным циклом.
Вот функция
type BWT = [String] -- List of Strings for Burrows Wheeler matrix
samplebwt = ["BANANA$"] -- Sample input
rotateBWT:: BWT -> BWT
rotateBWT a = if (head (last a)) /= '$'
then [tail (head a) ++ [head (head a)]] ++ rotateBWT [tail (head a) ++ [head (head a)]]
else a
rotateBWT samplebwt
-- returns ["ANANA$B"]
--expected output ["ANANA$B", "NANA$BA", "ANA$BNA", "NA$BANA", "A$BANAN", "$BANANA"]
Что мне не хватает?
разбить код на более мелкие части, которые могут быть проверены по отдельности, или тщательно проследить оценку на вашем ввод с ручкой и бумагой – jberryman
Ваш код [делает] (http://ideone.com/vM5Czo) генерирует все комбинации (он дублирует последний), но, очевидно, вы не используете код, который, как вы думаете. – user2407038