使用haskell删除重复的单词

时间:2014-01-01 16:32:08

标签: haskell functional-programming

我想删除字符串中重复的单词..

eg: if input is "he is the the good boy boy"
       out put is "he is the good boy"

我完成了编码,但工作不正常。

deleterepeat:: String -> String
deleterepeat []  = []
deleterepeat [xs] = [xs]
deleterepeat (xs1:xs2:xs)
      | xs1 == xs2  = deleterepeat (xs1:xs)
      | otherwise = xs1 : deleterepeat (xs2:xs)

removeall :: String -> String
removeall = unwords . map deleterepeat. words

这适用于字符..但不能用于文字..

有人可以帮我解决这个问题......

3 个答案:

答案 0 :(得分:2)

问题在于deleterepeat正在处理String,即[Char],而不是[String]。这意味着它会删除每个单词中的重复字符,而不是重复的单词。

将类型更改为Eq a => [a] -> [a][String] -> [String],并将其直接调用整个单词列表,即使用deleterepeat而不是map deleterepeat

答案 1 :(得分:1)

将deleterepeat的类型更改为[String] - > [String],然后删除地图。

答案 2 :(得分:0)

使用Data.List中的“words”和“nub”函数会更容易。