[英]Haskell Pattern Matching on Strings - Why doesn't this work?
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
或模式匹配來刪除它。
:
運算符將一個元素包含在列表的頭部。 您的模式只匹配冒號是列表中第二項的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.