String 如何将字符串转换为ASCII,然后再转换回Haskell?
我是Haskell(从今天早上开始)的初学者,我正在尝试创建一个函数来加密字符串,方法是将字符串转换为ASCII,将指定的整数添加到ASCII,然后再转换回字符串。我想我已经正确地对单个字符执行了此操作,但在涉及完整字符串时,我被卡住了:String 如何将字符串转换为ASCII,然后再转换回Haskell?,string,haskell,String,Haskell,我是Haskell(从今天早上开始)的初学者,我正在尝试创建一个函数来加密字符串,方法是将字符串转换为ASCII,将指定的整数添加到ASCII,然后再转换回字符串。我想我已经正确地对单个字符执行了此操作,但在涉及完整字符串时,我被卡住了: import Data.Char encodeChar :: Char -> Int -> Char encodeChar 'x' y = chr ((ord 'x') + y) encode :: String -> Int ->
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)
要对字符串进行编码,一个选项是递归进行。首先,我们选择如何对空列表进行编码。然后,假设
encodexsy
完成了它的工作,我们定义encode(x:xs)y
应该是什么
经过一些思考,我们可以看到encode(x:xs)y
应该是一个字符串,其第一个字符是使用y
对x
进行编码,即encodeChar xy
,而该字符串的其余部分(尾部)是使用y
对xs
进行编码,即递归调用的结果
然后我们获得:
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
函数
encode :: String -> Int -> String
encode xs y = map (\x -> encodeChar x y) xs
-- or, using more advanced functions
encode xs y = map (flip encodeChar y) xs
你会在haskell标签的“信息”部分找到一些好的信息,其中一个信息会指向hoogle,你可以用它来回答你的问题,为什么你认为一个字符就可以正确地完成它?你测试过了吗?通过运行
ghci nameofyourfile.hs
然后键入,比如说,encodeChar'a'5
Immibis,您应该能够非常轻松地测试它,我已经测试过了,它似乎可以工作。然而,我在应用上面Alec建议的map函数时遇到了一个错误*editOops!我并不惊讶我的评论不起作用——我只是惊讶有人投了赞成票encodesy=map(`encodeChar`y)s
应该是这样的。@SyedAhamed我想你没有,因为你的encodeChar
只对字母x有效