代码之家  ›  专栏  ›  技术社区  ›  Macha

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

  •  9
  • Macha  · 技术社区  · 14 年前
    getMultiWordPortion :: String -> String
    getMultiWordPortion (x:':':xs) = xs
    getMultiWordPortion _ = ""
    

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

    我使用的示例字符串(“PING:gibson.freenode.net“这是IRC客户端的一部分,是我得到了空白返回值。

    我做错什么了?

    2 回复  |  直到 14 年前
        1
  •  17
  •   sepp2k    14 年前

    x:':':xs 意思是“第一个字符是 x ,第二个字符是 ':' 其余字符在列表中 xs Char ,不是 [Char]

    不能在列表上使用模式匹配来表示“匹配一个子列表,后跟一个元素,后跟剩余的列表”。

    要获取第一个冒号后面的子字符串,可以使用 dropWhile (/= ':') theString . 这将包括结肠,所以使用 tail

        2
  •  4
  •   Greg Sexton    14 年前

    这个 : 操作员conses 元素添加到列表的开头。您的模式将只匹配冒号是列表中第二项的字符串。