gpt4 book ai didi

Haskell - 如何在反斜杠字符上进行模式匹配?

转载 作者:行者123 更新时间:2023-12-03 21:44:55 25 4
gpt4 key购买 nike

我想用模式匹配的递归函数将\n 替换为字符串中的空格,但我不知道如何匹配\字符。

这是我的功能:

replace :: String -> String
replace ('\\':'n':xs) = ' ' : replace xs
replace (x:xs) = x : replace xs
replace "" = ""

('\':'n':xs) 中,反斜杠会转义单引号并弄乱代码,所以我写了 ('\\':'n' :xs) 期望第一个\将转义第二个\并匹配字符串中的反斜杠。然而,事实并非如此。

这是我在 GHCi 中尝试该函数时发生的情况:

*Example> replace "m\nop"
"m\nop"
*Example> replace "m\\nop"
"m op"

如何匹配单个反斜杠?

最佳答案

\n 是单个字符。如果我们在 "Hello\nWorld!" 这样的字符串中使用 \n,那么结果列表如下所示:['H','e', 'l','l','o','\n','W','o','r','l','d','!']\n 表示一个换行符,一个single ASCII byte 10 .但是,由于在许多编程语言中输入换行符并不容易,因此在字符串文字中使用转义序列 \n

如果你想在换行符上进行模式匹配,你必须使用整个转义序列:

replace :: String -> String
replace ('\n':xs) = ' ' : replace xs
replace (x:xs) = x : replace xs
replace "" = ""

否则,您只会匹配文字 \

练习:既然replace 有效,请尝试使用map 而不是显式递归。

关于Haskell - 如何在反斜杠字符上进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65150272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com