如何使用 Haskell 中给定的字典列表将一个字符串翻译成另一个字符串?

How can I translate a String to another String using a given dictionary list in Haskell?

我制作了一个元组列表:

dic = zip(['a' .. 'z') (['o' .. ])

它也应该适用于无限列表,所以我在想我不能使用递归或列表理解。然后呢? :D 结果应该是这样的:

dic :: [Char] -> [Char]
dic "abc" = "opq"

首先,您应该从 'z' 返回到 'a',因此您的 dic 看起来像:

dic :: [(Char, Char)]
dic = zip ['a'..'z'] (['o'..'z'] ++ ['a'..])

现在,您可以从列表中查找字符:

func :: [Char] -> [Char]
func = map (\x ->
    case lookup x dic of
        Just v -> v
        otherwise -> x)

或者,fromMaybe 来自 Data.Maybe

import Data.Maybe

func :: [Char] -> [Char]
func = map (\x -> fromMaybe x $ lookup x dic)

由于懒惰求值,这适用于无限字符列表(与 recursive/list 理解解决方案一起):如果未使用值,则不会计算它。