繁体   English   中英

沿元组列表过滤

[英]Filter along a list of tuples

我正在尝试解决代码出现的第 4 天,为此我目前需要过滤元组列表的列表。

首先,让我们来获取样本

sample=[[(2,4),(6,8)],[(2,3),(4,5)],[(5,7),(7,9)],[(2,8),(3,7)],[(6,6),(4,6)],[(2,6),(4,8)]]

此示例是使用Data.Text.splitOn和一个简单的元组化 function (\[x,y] -> (x,y))获得的。

然后,我们需要找到一个包含另一个的所有元组对。 然后,我编写了简单的以下帮助程序

contains :: (Int,Int) -> (Int,Int) -> Bool
contains a b = (fst a) <= (fst b) && (snd a) <= (snd b)

最后,我想从样本中filter ,但我不知道该怎么做。 当然,我使用map将二维元组列表简化为简单的一维元组列表;

main :: IO ()
main = do
  print $ length $ map solution sample

其中, solution

solution :: [(Int,Int)] -> [Bool]
solution = filter (\x y -> x `contains` y || y `contains` x)

出现以下错误

Couldn't match type ‘(Int, Int)’ with ‘Bool’
      Expected: [(Int, Int)] -> [Bool]
        Actual: [(Int, Int)] -> [(Int, Int)]
    • In the expression:
        filter (\ x y -> x `contains` y || y `contains` x)

要么

solution :: [(Int,Int)] -> [(Int,Int)]
solution = filter (\x y -> x `contains` y || y `contains` x)

出现以下错误

Couldn't match type ‘(Int, Int)’ with ‘Bool’
      Expected: [(Int, Int)] -> [Bool]
        Actual: [(Int, Int)] -> [(Int, Int)]
    • In the expression:
        filter (\ x y -> x `contains` y || y `contains` x)

要么

solution :: [(Int,Int)] -> [(Int,Int)]
solution = filter (\[x,y] -> x `contains` y || y `contains` x)

出现以下错误

    • Couldn't match expected type: (Int, Int)
                  with actual type: [(Int, Int)]
    • In the pattern: [x, y]
      In the first argument of ‘filter’, namely
        ‘(\ [x, y] -> x `contains` y || y `contains` x)’
      In the expression:
        filter (\ [x, y] -> x `contains` y || y `contains` x)

ETC...

我尝试了我的学习大脑能想到的一切,这让我从最近几天开始发疯。 我究竟做错了什么?

我认为你的根本问题是你的数据表示。 您的 function contains两个元组; 那部分可能不错。 (有点不清楚你定义的不等式是否正确,我不知道上下文。)但是你提取的sample包含的项目都是元组列表 不能保证长度。

我建议重新处理sample以具有类型[((Int, Int), (Int, Int))] 我认为您可以从那里开始工作; 如果你再次陷入困境,你可以尝试uncurry ing contains (尽管你已经在进行模式匹配,所以你可以忽略它)。

(\xy ->...)是一个带有两个参数的 lambda。 你没有那个,你只有一个元组参数。

(\[x, y] ->...)更接近:它是一个 lambda 接受一个参数,一个列表预计正好有两个元素。 但这仍然不是二元组。

相反,您想要(\(x, y) ->...) ,一个 lambda 采用二元组参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM