Dictionary Haskell:对列表中的每个元组调用另一个元组中的函数

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

我有一个元组的一般列表,比如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)、(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)]

正是我想要的,我感谢你的帮助。正是我想要的,我感谢你的帮助。