我试图通过列表理解在haskell的元组列表中提取一个元组的第一个元素,但不知何故它只是输出第一个然后停止,所以我决定通过递归来做到这一点,看起来像这样:
tuples :: (Ord a, Ord b) => [(a, b)] -> [a]
tuples [] = []
tuples ((x,y):xs) = x : tuples xs
现在,虽然这可行,但我想知道如何通过列表理解来做同样的事情。
是的,您可以在列表推导中使用模式匹配,其中:
tuples :: [(a, b)] -> [a]
tuples xs = [ x | (x, _) <- xs ]
但可能最简单的方法就是使用fst :: (a, b) -> a
:
tuples :: [(a, b)] -> [a]
tuples = map fst
的类型约束不是(Ord a, Ord b)
必需的:我们在任何地方都没有使用为属于类型类成员的类型定义的函数。Ord
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句