Haskell-如何对反斜杠字符进行模式匹配?
我想用模式匹配的递归函数用字符串中的空格替换 n,但我不知道如何匹配 字符。
这是我的功能:
replace :: String -> String
replace ('':'n':xs) = ' ' : replace xs
replace (x:xs) = x : replace xs
replace "" = ""
在('':'n':xs)反斜杠中会转义单引号并弄乱代码,所以我写('':'n':xs)期望第一个 会转义第二个 并匹配字符串中的反斜杠。然而,事实并非如此。
这就是我在 GHCi 中尝试该函数时发生的情况:
*Example> replace "mnop"
"mnop"
*Example> replace "mnop"
"m op"
如何匹配单个反斜杠?
回答
n是单个字符。如果我们使用n像一个字符串"HellonWorld!",然后将得到的名单看起来是这样的:['H','e','l','l','o','n','W','o','r','l','d','!']。n表示换行符,单个 ASCII 字节10。但是,由于在许多编程语言中输入换行符并不容易,因此n在字符串文字中使用转义序列代替。
如果要在换行符上进行模式匹配,则必须使用整个转义序列:
replace :: String -> String
replace ('n':xs) = ' ' : replace xs
replace (x:xs) = x : replace xs
replace "" = ""
否则,您将只匹配文字.
练习:现在replace可以了,尝试使用map而不是显式递归。