繁体   English   中英

组合列表的 Haskell 函数

[英]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.

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