【问题标题】:How can I translate a String to another String using a given dictionary list in Haskell? [closed]如何使用 Haskell 中的给定字典列表将一个字符串翻译成另一个字符串? [关闭]
【发布时间】:2021-03-01 20:10:38
【问题描述】:

我制作了一个元组列表:

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

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

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

【问题讨论】:

    标签: dictionary haskell tuples encode translate


    【解决方案1】:

    首先,你应该从'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)
    

    或者,使用来自Data.MaybefromMaybe

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

    由于惰性求值,这适用于无限字符列表(以及递归/列表理解解决方案):如果不使用值,则不计算它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      相关资源
      最近更新 更多