我有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
。
答案 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