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而不是显式递归。


以上是Haskell-如何对反斜杠字符进行模式匹配?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>