[英]Haskell Function which combines Lists
我想编写一个递归函数,它获取两个列表 + 一个条件作为输入,并输出所有可能的元组,其中每个元素来自满足条件的第一个和第二个列表。
它应该看起来像这样:
Combine [1,2,3] [5,6,7] (\a b -> 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
但是,它还没有创建所有可能的组合,也没有按条件过滤。 我真的不知道如何解决这个问题。
提前致谢
您不需要递归函数,但需要高阶函数。
combinationsFilter :: (a -> b -> Bool) -> [a] -> [b] -> [(a,b)]
combinationsFilter f as bs = filter (uncurry f) [(a, b) | a <- as, b <- bs]
[(一,二) | a <- as, b <- bs] 生成 a 和 b 的所有组合。
过滤器...只是按条件过滤列表。
如果你想传递类型为 (a -> b -> c) 而不是 ((a, b) -> c) 的函数,则需要 uncurry。 它将一个转换为另一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.