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

发布于 2024-09-17 10:37:37 字数 311 浏览 7 评论 0原文

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

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

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

我在这里做错了什么?

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

The expected result from pattern matching in this code is that everything before the first colon get's assigned to x, and everything afterwards gets assigned to xs, which is the result. If there is no colon, nothing is returned.

What actually happens with a sample string I'm using ("PING :gibson.freenode.net" - it's part of an IRC client) is that I get the blank return value.

What am I doing wrong here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不甘平庸 2024-09-24 10:37:48

: 运算符将 one 元素连接到列表的头部。您的模式将仅匹配冒号是列表中第二项的字符串。

The : operator conses one element to the head of a list. Your pattern will only match a string where the colon is the second item in the list.

弃爱 2024-09-24 10:37:46

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

无法在列表上使用模式匹配来表示“匹配一个子列表,后跟一个元素,后跟其余列表”。

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

The pattern x:':':xs means "The first character is x, the second character is ':' the remaining characters are in the list xs". So this means that the type of x is Char, not [Char] and that the pattern only matches if there's exactly one character before the colon.

There is no way to use pattern matching on lists to say "match one sublist, followed by an element, followed by the remaining list".

To get the substring after the first colon you can use dropWhile (/= ':') theString. This will include the colon, so use tail or pattern matching to remove it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文