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」関数は、1 つの Char が別のマップにマップされる Map を返します。この Map に基づいて、1 つの Char を取得し、別の 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 にはパラメーターが 1 つしかないため、このコードは機能しません。マップを格納し、マップ関数で値を検索するには、グローバル変数のようなものが必要です。しかし、コードを書き直す方法がわかりません。
ps文字列の各文字に「キー」を追加するだけでよいと思いますが、一般的な解決策を探しています。