【发布时间】:2022-01-19 10:06:12
【问题描述】:
我想消除像f "aaabbbcccdeefgggg" = "abcdefg"这样的字符串中的连续重复项
这是我的代码
f :: String -> String
f "" = ""
f "_" = "_"
f (x : xs : xss)
| x == xs = f (xs : xss)
| otherwise = x : f (xs : xss)
我得到了错误的非详尽模式,我认为它来自第二行,当它只剩下 1 个字符时,程序不知道如何处理。我该如何解决?
【问题讨论】:
-
f "_" = "_"应该做什么? -
你只处理一个特定的单字符字符串,还有更多。
-
"_"匹配文字字符串"_"。我猜你想要的是[x]来匹配一个单例列表。 -
然后改成
f [c] = [c] -
我相信这个问题最好总结如下:模式
"a"是模式['a'](或'a':[])的简写,其中'a'是一个字符文字——这是与[a](或a:[])的模式不同,其中a是一个变量名。在您的情况下,您有字符文字'_'与通配符模式_,但原理是相同的——它们是不同的结构。
标签: haskell