haskell - 从字符串中消除连续重复

标签 haskell

我想从 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/

相关文章:

haskell - 绑定(bind)变量时Haskell中的无限循环

haskell - 在 Haskell 中生成新的和不同的随机列表(没有 IO)?

haskell - 如何向 http-client-tls 提供客户端证书?

haskell - 状态 Monad 在游戏中保存棋盘

haskell - 如何在没有 Cabal 或 Cabal-Install 的情况下安装包/库?

haskell - 对Haskell Monad变形金刚感到困惑

haskell - Haskell 中嵌套列表的模式匹配

haskell - Cabal 无法解析测试套件 block 中的构建依赖项

string - Haskell 中的 Data.Text 常量

Haskell Double 除以 Int