如何将String转换为ASCII然后再转换回Haskell?

时间:2017-03-09 23:29:09

标签: string haskell

我是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)

1 个答案:

答案 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