Haskell:如何比较元组?

| 我正在尝试使元组列表以特定方式存储一些信息。例如
scotland
属于
uk
england
属于
uk
,依此类推。然后将两个字符串作为参数(
String -> String -> Bool
)进行如下处理:
Main> owns \"china\" \"beijing\"
True
Main> owns \"uk\" \"beijing\"
False
这是我的代码:
lst = [(\"uk\",\"scotland\"),(\"uk\",\"england\"),(\"uk\",\"wales\"),(\"china\",\"beijing\"),(\"china\",\"hongkong\"),(\"china\",\"shanghai\")]

owns :: String -> String -> Bool
owns a b = [n|(a,b) <- lst, (n == a)] && [m|(a,b) <- lst, (m==b]
感谢您的帮助。     
已邀请:
如果我对您的问题理解正确,那么您将建立一个关系表。然后,您获得一个关系并想检查它是否在此表中?只需使用
elem
。当且仅当b中有
a
时,8ѭ才得出真。     
在Haskell列表库中查找\“关联列表\”,并使用
lookup
函数:
Prelude> lookup \"china\" ls
Just \"beijing\"
其中“ 10”被实现为:
lookup _key []          =  Nothing
lookup  key ((x,y):xys)
    | key == x          =  Just y
    | otherwise         =  lookup key xys
一旦可以通过其键查找元素,就可以将其与期望值进行比较。     
这是
owns
函数的定义:
owns :: String -> String -> Bool
owns a b = (a,b) `elem` lst
为了回答您的问题的标题,如果可以比较两个相同长度的元组,则可以比较它们的元素。如果您现在熟悉类型类,
(Eq a, Eq b) => Eq (a, b)
(Eq a, Eq b, Eq c) => Eq (a, b, c)
...
    

要回复问题请先登录注册