我是Haskell的初学者(今天早上开始),我正在尝试通过将字符串转换为ASCII来加密字符串,向ASCII添加指定的整数然后转换回字符串。我认为我已经为一个角色正确地完成了这个,但是当涉及到完整的字符串时我被困住了:
import Data.Char
encodeChar :: Char -> Int -> Char
encodeChar 'x' y = chr ((ord 'x') + y)
encode :: String -> Int -> String
encode (x : xs) y = chr ((ord (x : xs)) + y)
答案 0 :(得分:1)
要对字符串进行编码,选项将以递归方式进行。首先,我们选择如何编码空列表[]
。然后,假设encode xs y
完成其工作,我们定义encode (x:xs) y
应该是什么。
经过一些反思后,我们可以看到encode (x:xs) y
应该是一个字符串,其第一个字符是x
使用y
的编码,即encodeChar x y
,而其余的string(tail)是使用xs
的{{1}}的编码,即递归调用的结果。
然后我们获得:
y
这种递归是如此常见,以至于有一个库函数encode :: String -> Int -> String
encode [] y = []
encode (x : xs) y = encodeChar x y : encode xs y
,它可以为我们执行它。
map
返回map f [x1, .., xn]
。因此,我们可以在整个字符串上映射[f x1, .., f xn]
函数。
encodeChar