Dictionary Haskell:对列表中的每个元组调用另一个元组中的函数
我有一个元组的一般列表,比如somap.fromList[(10,20),(30,40),(50,60)] 我有一个generalFunction,我想在其中调用一个特殊函数,该函数接受一个元组(x,y),并根据其长度为常规列表的每个元组插入(x,y)(y,x) 例如:当我用Dictionary Haskell:对列表中的每个元组调用另一个元组中的函数,dictionary,haskell,Dictionary,Haskell,我有一个元组的一般列表,比如somap.fromList[(10,20),(30,40),(50,60)] 我有一个generalFunction,我想在其中调用一个特殊函数,该函数接受一个元组(x,y),并根据其长度为常规列表的每个元组插入(x,y)(y,x) 例如:当我用Map.fromList[(10,20)、(30,40)、(50,60)]调用GeneralFunction 最终结果如下Map.fromList[(10,20)、(20,10)、(30,40)、(40,30)、(50,60
Map.fromList[(10,20)、(30,40)、(50,60)]调用GeneralFunction
最终结果如下Map.fromList[(10,20)、(20,10)、(30,40)、(40,30)、(50,60)、(60,50)]
我知道如何使用带有键值的insertWith以及如何使用list
问题:
我更喜欢逐元组迭代的过程
欢迎任何提示、想法或提示。您可以在specialFunction
中将Map
放在一边,想想它们是否只是元组列表:
specialFunction :: Ord m -> (m, m) -> [(m, m)]
specialFunction (a, b) = [(a, b), (b, a)]
然后,我不太确定您的general函数
是做什么的,但您可以同样使用specialFunction
:
generalFunction :: Ord m -> [(m, m)] -> Map m m
generalFunction = Map.fromList . concat . map specialFunction
如果要在值列表上应用某些函数,可以始终使用map
(另外,对于map
数据类型,还可以使用map
)
因此,您可以得到:
Prelude Data.Map> generalFunction [(10,20),(30,40),(50,60)]
fromList [(10,20),(20,10),(30,40),(40,30),(50,60),(60,50)]
您可以将Map
放在specialFunction
中,然后想想它们是否只是元组列表:
specialFunction :: Ord m -> (m, m) -> [(m, m)]
specialFunction (a, b) = [(a, b), (b, a)]
然后,我不太确定您的general函数
是做什么的,但您可以同样使用specialFunction
:
generalFunction :: Ord m -> [(m, m)] -> Map m m
generalFunction = Map.fromList . concat . map specialFunction
如果要在值列表上应用某些函数,可以始终使用map
(另外,对于map
数据类型,还可以使用map
)
因此,您可以得到:
Prelude Data.Map> generalFunction [(10,20),(30,40),(50,60)]
fromList [(10,20),(20,10),(30,40),(40,30),(50,60),(60,50)]
正是我想要的,我感谢你的帮助。正是我想要的,我感谢你的帮助。