[英]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
,這取決於你因此解雇兩個警衛之一的結果。 我將填寫…
部分作為練習。
如果您想為條件成立的x
和y
生成所有可能的組合,列表理解是一個更好的工具。 然后您可以使用:
combine:: [a] -> [b] -> (a -> b -> Bool) -> [(a, b)]
combine xs ys p = [ … | … <- xs, … <- ys, … ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.