如何使用 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 理解解决方案一起):如果未使用值,则不会计算它。
我制作了一个元组列表:
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 理解解决方案一起):如果未使用值,则不会计算它。