簡體   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