如果list元素与1st元组元素匹配,则将其替换为2nd元组元素

时间:2016-10-30 18:01:50

标签: haskell

我有2个名单:
- list1作为元组形式的字典:
[("aaa", "bb"), ("d", "efg"), ("if found this", "replace with this")]
- list2作为要翻译的元素列表:["aaa", "efg", "zzz"]

如果list2元素匹配list1元组第二元素,我需要返回一个列表,其中来自list2的元素替换为来自list1元素的元组第二元素。在此示例中,结果列表将如下所示["bb", "efg", "zzz"]

怎么做? 我最近才开始学习Haskell所以语法是我的主要问题。我认为功能定义应该如下所示 replace :: Eq a => [(a,a)] -> [a] -> [a]
如果找到来自元组的值并递归调用函数list2,则函数应该执行类似try t find replace的值,如果找不到值,则保持list2的值并递归调用函数replace

1 个答案:

答案 0 :(得分:1)

无需重新发明轮子。

import qualified Data.Map as M

list1 = [("aaa", "bb"), ("d", "efg"), ("if found this", "replace with this")]
list2 = ["aaa", "efg", "zzz"]

replace d = map (\k -> M.findWithDefault k k d)

main = print $ replace (M.fromList list1) list2