簡體   English   中英

Haskell 列出組合 function

[英]Haskell lists combine function

我想編寫一個遞歸的 function,它獲取兩個列表 + 一個要求作為輸入,並輸出所有可能的元組,其中每個元素來自滿足要求的第一個和第二個列表。

它應該看起來像這樣:

組合 [1,2,3] [5,6,7] (\ab -> a+b > 7) -> [(1,7),(2,6),(2,7),(3, 5),(3,6),(3,7)]。

我目前只有:

combine:: [a] -> [b] -> [(a, b)] 
combine [] ys = []
combine xs [] = []
combine (x:xs) (y:ys) = (x,y) : combine xs ys 

但它不會過濾任何東西。

這是有道理的,因為您的輸入不會過濾任何內容。 你應該在這里添加一個額外的參數:

combine:: [a] -> [b] -> (a -> b -> Bool) -> [(a, b)]
combine [] ys _ = []
combine xs [] _ = []
combine (x:xs) (y:ys) p
  | … = …
  | otherwise = …

因此,這里的p是一個 function,它接受一個a和一個b並返回一個Bool ,這取決於你因此解雇兩個警衛之一的結果。 我將填寫部分作為練習。

如果您想為條件成立的xy生成所有可能的組合,列表理解是一個更好的工具。 然后您可以使用:

combine:: [a] -> [b] -> (a -> b -> Bool) -> [(a, b)]
combine xs ys p = [ … | … <- xs, … <- ys, … ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM