我有创建 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 返回另一个 Char:
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 必须只有一个参数。我需要像全局变量这样的东西来将地图存储在其中,并在我的地图函数中从中查找值。但我不知道如何重写我的代码。
ps 我想我可以在字符串中的每个字符中添加“键”,但我正在寻找通用解决方案。