如何解决如何处理字符串haskell中以'\'结尾的文件
import Data.Char (isAlpha)
import Data.List (elemIndex)
import Data.Maybe (fromJust)
helper = ['a'..'z'] ++ ['a'..'z'] ++ ['A'..'Z'] ++ ['A'..'Z']
rotate :: Char -> Char
rotate x | '\' = '\'
|isAlpha(x) = helper !! (fromJust (elemIndex x helper) + 13)
| otherwise = x
rot13 :: String -> String
rot13 "" = ""
rot13 s = map rotate s
main = do
print $ rot13( "hey fellow warriors" )
print $ rot13( "This is a test")
print $ rot13( "This is another test" )
print $ rot13("\604099\159558\705559&\546452\390142")
n <- getLine
print $ rot13( show n)
rot13.hs:8:15: error:
lexical error in string/character literal at character ' '
|
8 | rotate x | '\' = '\'
即使不替换也有错误,只是使用 isAlpha 过滤
如何处理?
解决方法
在许多语言中,反斜杠是转义字符。它用于引入以其他方式难以或不可能包含在字符串中的字符。例如,字符串不能跨越多行*,因此不可能在字符串文字中包含文字换行符;和双引号结束字符串,因此通常不可能在字符串文字中包含双引号。 \n
和 \"
转义分别涵盖:
> putStrLn "before\nmiddle\"after"
before
middle"after
>
由于 \
引入了转义码,它总是期望后面跟着一些东西。如果您希望在该位置包含文字反斜杠,则可以使用第二个反斜杠。例如:
> putStrLn "before\\after"
before\after
>
Report,Section 2.6 是关于可用转义符及其含义的最后一句话。
文字字符具有类似(虽然不完全相同)的字符串转义集合。所以对你的语法的修复看起来像这样:
rotate x | '\\' = '\\'
这将让您的代码解析,尽管一旦您通过它,还有进一步的错误需要修复。
* 是的,是的,字符串间隙。我知道。实际上并没有改变这一点,因为间隙中的换行符不包含在结果字符串中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。