如何从仅匹配元组的第一个值的元组列表中删除元素。
delete (2, _ ) [(2, True), (3, False)]
在这种情况下,签名如下所示:
delete1 :: Eq a => a -> [(a, b)] -> [(a, b)]
我们可以使用递归来查找 2 元组中的匹配项,因此该函数可以如下所示:
delete1 :: Eq a => a -> [(a, b)] -> [(a, b)]
delete1 y = go
where go [] = … -- (1)
go (x:xs)
| y == x = … -- (2)
| otherwise = … -- (3)
填写…
s 留作练习。在第一种情况 ( (1)
) 中,列表已用尽,因此我们可以返回一个空列表。
对于第二种情况 ( (2)
),已找到匹配项,因此在这种情况下,我们在列表的尾部递归。
在最后一种情况下,该项目x
与不匹配y
,因此在这种情况下,我们产生该项目并递归。
然而,我们不必自己实现递归,我们可以filter :: (a -> Bool) -> [a] -> [a]
使用列表,从而实现如下函数:
delete1 :: Eq a => a -> [(a, b)] -> [(a, b)]
delete1 y = filter func
where func = …
这里…
部分需要返回True
以防我们想要保留项目,并返回False
以防我们想要过滤掉该值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句