2013-10-10 2 views
0

(Я полный новичок в stackoverflow, сделаю все возможное, чтобы задать свой вопрос соответствующим образом, не стесняйтесь исследовать меня, если я этого не сделаю).Заменить шаблон элементов в списке Haskell

Итак, я новичок в Haskell, и я делаю несколько упражнений, чтобы повесить его.

Я решил половину упражнений, который должен заменить каждое вхождение согласного в строке с этим согласным + «O» +, что согласным, затем вернуть новую строку, вот код:

hurdyGurdy c = concat [ if n `elem` "AEOUYaeouy" then [n] else [n, 'o', n] | n <- c] 

Хотя я полностью застрял в том, чтобы превратить строку hurdyGurdy обратно в соответствующее нормальное слово, то есть «HoHelollolo» должно стать «Hello».

Итак, я думаю, что я знаю, что каждый согласный будет иметь следующий символ «o», и если я могу просто удалить или выбросить их из списка, это все хмурый вопрос. Или если я заменил целое [n, 'o', n] на n. Хотя я просто не знаю, как это сделать.

Я предполагаю, что первый способ был бы самым простым, но как мне избавиться от текущего элемента И следующего?

Это не совсем домашнее задание, это тепло до домашней работы ..!

Edit: Я решил это так .. не совсем приятно смотреть на

тыс
unRovarsprak ("") = ("") 
unRovarsprak (c1:'o':c2:xs) 
     | isConsonant c1 = c1 : unRovarsprak xs 
    | otherwise = xs 
unRovarsprak (c1:xs) 
    | c1 `elem` vokaler = c1 : unRovarsprak xs 
    | otherwise  = xs 
+1

'' Hohelollolo' или HoHelollolo'? – kennytm

+0

Хорошо, второй, HoHelollolo, просто отредактирован! – Webel

+0

Хорошая работа по его решению! В вставленном коде обратите внимание, что скобки не нужны вокруг '' '' (либо как аргумент, либо возвращаемое значение). Тогда я не совсем уверен, какова роль последней строки, но это может быть вне пределов заданного вами вопроса. –

ответ

2

Вы, вероятно, хотите использовать базис рода:

unHurdyGurdy (c1:'o':c2:xs) 
    | isConsonnant c1 && c2 == c1 = c1 : unHurdyGurdy xs 

Это листья в качестве упражнения для читателя:

  • написание isConsonnant
  • обработки гласные
  • модели обработки сбоев сопоставления (строки, которые не являются результатом hurdyGurdy)
+0

Так что я предполагаю, что я могу заменить isConsonant на c1 'notElem' Vowel, даст это! Ура! – Webel

Смежные вопросы