【问题标题】:How to delete an element from the list of tuples matching only on first value of the tuple in Haskell如何从仅匹配 Haskell 中元组的第一个值的元组列表中删除元素
【发布时间】:2021-05-24 08:35:00
【问题描述】:

如何从元组列表中删除仅匹配元组第一个值的元素。

delete (2, _ ) [(2, True), (3, False)]

【问题讨论】:

  • 你尝试了什么,什么不起作用?
  • 提示:检查模块Data.List。有一个功能可以做到这一点

标签: list haskell filter


【解决方案1】:

在这种情况下,签名看起来像:

delete1 :: <b>Eq a</b> =&gt; <b>a</b> -&gt; [(<b>a</b>, b)] -&gt; [(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 -&gt; Bool) -&gt; [a] -&gt; [a]列表,从而实现如下函数:

delete1 :: Eq a => a -> [(a, b)] -> [(a, b)]
delete1 y = filter func
    where func = …

这里 部分需要返回 True 以防我们想要保留该项目,并返回 False 以防我们想要过滤掉该值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2023-01-26
    • 2011-06-03
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2015-05-22
    相关资源
    最近更新 更多