字符串上的 Haskell 模式匹配 - 为什么这不起作用?

标签 haskell pattern-matching

getMultiWordPortion :: String -> String
getMultiWordPortion (x:':':xs) = xs
getMultiWordPortion _ = ""

这段代码中模式匹配的预期结果是,第一个冒号之前的所有内容都分配给 x,之后的所有内容都分配给 xs,这就是结果。如果没有冒号,则不返回任何内容。

我正在使用的示例字符串(“PING :gibson.freenode.net” - 它是 IRC 客户端的一部分)实际发生的情况是我得到了空白返回值。

我在这里做错了什么?

最佳答案

模式x:':':xs表示“第一个字符是 x ,第二个字符是 ':' 其余字符在列表中 xs ”。所以这意味着 x 的类型是 Char ,而不是 [Char]并且该模式仅在冒号前只有一个字符时才匹配。

没有办法在列表上使用模式匹配来表示“匹配一个子列表,然后是一个元素,然后是剩余的列表”。

要获取第一个冒号后的子字符串,您可以使用 dropWhile (/= ':') theString .这将包括冒号,所以使用 tail或模式匹配将其删除。

关于字符串上的 Haskell 模式匹配 - 为什么这不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3646128/

相关文章:

haskell - zipper 共轭,一般来说

haskell - 使用 FFI 从 Haskell 调用 CUDA "Hello World"会给出错误的结果

haskell - Haskell 学院的代码共享

Java 忽略大小写替换字符串序列?

function - Haskell 中与(高阶)函数的模式匹配

mysql - mysql中模式匹配和日期时间函数的混合

haskell - NixOS 和 ghc-mod - 找不到模块

arrays - Haskell 可变结构与不可变 Shell

scala - 列表中的案例类和模式匹配

algorithm - 目前认为用于二维点匹配的 "best"算法是什么?