Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 以无序元组作为键的映射_Haskell_Map_Tuples - Fatal编程技术网

Haskell 以无序元组作为键的映射

Haskell 以无序元组作为键的映射,haskell,map,tuples,Haskell,Map,Tuples,我在具有相同类型的两部分的元组和Int之间有一个映射 Map (a,a) Int 独立于元组中as的顺序,我希望稍后能够将其从映射中取出 lookup (2,1) map == lookup (1,2) map 不插入两次元组就可以了吗?您可以设置键(max a b,min a b)您可以对元组进行排序,然后使用它插入元组(也可以进行搜索): 使用它,您将看到如下情况: Prelude Data.Map> let a = Map.fromList [(sortTup (2,1), 5]

我在具有相同类型的两部分的元组和Int之间有一个映射

Map (a,a) Int
独立于元组中
as
的顺序,我希望稍后能够将其从映射中取出

lookup (2,1) map == lookup (1,2) map

不插入两次元组就可以了吗?

您可以设置键
(max a b,min a b)

您可以对元组进行排序,然后使用它插入元组(也可以进行搜索):

使用它,您将看到如下情况:

Prelude Data.Map> let a = Map.fromList [(sortTup (2,1), 5]
Prelude Data.Map> lookup (sortTup (1,2))
5
你可以试试这个:

import Control.Applicative

mylookup :: (Ord a) => (a,a) -> Map (a,a) Int -> Maybe Int
mylookup (x,y) m = lookup (x,y) m <|> lookup (y,x) m
导入控件。应用程序
mylookup::(Ord a)=>(a,a)->映射(a,a)Int->可能Int
mylookup(x,y)m=查找(x,y)m查找(y,x)m
import Control.Applicative

mylookup :: (Ord a) => (a,a) -> Map (a,a) Int -> Maybe Int
mylookup (x,y) m = lookup (x,y) m <|> lookup (y,x) m