如何处理字符串中的文件结束'' 哈斯克尔


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("604099159558705559&546452390142")

n <- getLine
print $ rot13( show n)

这是我的ROT13代码,当我试图直接传递以结尾的文件时出现了错误

rot13.hs:8:15: error:
lexical error in string/character literal at character ' '
|
8 | rotate x | '' = '' 

还有一个错误,即使不是替换也只是使用isAlpha过滤

如何处理?

在许多语言中,反斜杠是转义符。它用于引入难以或不可能以其他方式包含在字符串中的字符。例如,字符串不能跨越多行*,因此不可能在字符串文本中包含文本换行符;双引号结束字符串,因此通常不可能在字符串文字中包含双引号。n"逃逸分别涵盖以下内容:

> putStrLn "beforenmiddle"after"
before
middle"after
>

由于引入了转义码,它总是期望后面跟着一些东西。如果您希望在该位置包含一个字面反斜杠,则可以使用第二个反斜杠。例如:

> putStrLn "before\after"
beforeafter
>

《报告》第2.6节是关于哪些逃生方式及其含义的最终决定。

文字字符有一个类似(虽然不完全相同(的字符串转义集合。因此,对语法的修复如下:

rotate x | '\' = '\'

这将允许您的代码进行解析,尽管一旦您通过了解析,还会有更多的错误需要修复。

*是的,是的,字符串间隙。我知道。实际上并没有改变点,因为间隙中的换行符不包括在结果字符串中。

相关内容

  • 没有找到相关文章

最新更新