我想从 f "aaabbbcccdeefgggg" = "abcdefg"
这样的字符串中消除连续的重复项
这是我的代码
f :: String -> String
f "" = ""
f "_" = "_"
f (x : xs : xss)
| x == xs = f (xs : xss)
| otherwise = x : f (xs : xss)
我得到了错误的非详尽模式,我认为它来自第二行,当它只剩下 1 个字符时,程序不知道如何处理。我应该如何解决它?
最佳答案
"_"
pattern 不匹配带有任何字符的字符串,它匹配包含下划线的字符串。
您可以使用 [_]
作为单例字符串的模式,所以:
f :: String -> String
f "" = ""
f s@[_] = s
f (x : xs : xss)
| x == xs = f (xs : xss)
| otherwise = x : f (xs : xss)
这里我们使用 s@
将一个字符的字符串捕获为s
.或者我们可以简化为:
f :: String -> String
f (x : xs : xss)
| x == xs = f (xs : xss)
| otherwise = x : f (xs : xss)
f s = s
关于haskell - 从字符串中消除连续重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70768636/