我有创建Data.Map的代码:
import qualified Data.Map as Map
shift_string :: [Char] -> Int -> [Char]
shift_string s num = (drop num s) ++ (take num s)
ascii :: [Char]
ascii = ['a' .. 'z']
shifted_ascii :: Int -> [Char]
shifted_ascii n = shift_string ascii n
trans_table :: Int -> Map.Map Char Char
trans_table n = Map.fromList(zip ascii $ shifted_ascii n)'trans_table‘函数返回一个字符映射到另一个字符映射的映射。我可以创建一个函数来获取一个Char,并根据此Map返回另一个:
translate_char :: Char -> Int -> Maybe Char
translate_char c n = Map.lookup c $ trans_table n现在我想“翻译”地图中的每个符号。如下所示:
encode message key = map translate_char message此代码不起作用,因为translate_function必须只有一个参数。我需要一些像全局变量这样的东西来存储映射,并在我的map-function中查找它的值。但我不知道如何重写代码。
附注:我想我可以在字符串中的每个字符中添加“key”,但我正在寻找通用的解决方案。
发布于 2012-10-28 03:26:24
我不知道你的encode函数中的关键字是什么,但你可以使用像这样的东西
translate_char :: Int -> Char -> Maybe Char
translate_char n c = Map.lookup c $ trans_table n
encode :: Int -> String -> String
encode n s = catMaybes $ map (translate_char n) s这里的n决定了你要旋转的字符数。我改变了参数的顺序以避免使用flip。
https://stackoverflow.com/questions/13103323
复制相似问题