如何解决Haskell:如何比较元组?
| 我正在尝试使元组列表以特定方式存储一些信息。例如scotland
属于uk
,england
属于uk
,依此类推。然后将两个字符串作为参数(String -> String -> Bool
)进行如下处理:
Main> owns \"china\" \"beijing\"
True
Main> owns \"uk\" \"beijing\"
False
这是我的代码:
lst = [(\"uk\",\"scotland\"),(\"uk\",\"england\"),\"wales\"),(\"china\",\"beijing\"),\"hongkong\"),\"shanghai\")]
owns :: String -> String -> Bool
owns a b = [n|(a,b) <- lst,(n == a)] && [m|(a,(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)
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。