替换列表Haskell中的元素模式

时间:2013-10-10 11:04:55

标签: haskell

(我是stackoverflow的新手,我会尽力问我的问题,如果不这样做,请随时调查我。)

所以,我是Haskell的新手,我正在做一些练习来掌握它。

我已经解决了一半的练习,即用一个辅音+'o'+辅音替换弦乐中每一个辅音的出现,然后返回新的弦乐,这里是代码:

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

虽然我完全坚持将hurdyGurdy字符串变回相应的正常字词,即“HoHelollolo”应该变为“Hello”。

所以我想我知道每个辅音都会有一个下一个字符'o',如果我可以删除/删除这些字符,那么这些都是笨拙的。或者如果我用n替换整个[n,'o',n]。虽然我只是不知道该怎么做。

我猜第一种方式最简单,但我如何摆脱当前元素和下一个?

这不完全是作业,它是热身作业..!

编辑:我已经像这样解决了..看你不太好看

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 个答案:

答案 0 :(得分:2)

你可能想要使用这种类型的基础:

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

这留给读者练习:

  • 撰写isConsonnant
  • 处理元音
  • 处理模式匹配失败(不是hurdyGurdy的结果的字符串)