繁体   English   中英

带列表的功能组合

[英]Function composition with lists

我想创建一个接收三个列表的函数:第一个是二进制函数的列表,第二个和第三个是一元函数的列表。 结果必须是这样的:

 \x y -> f (g x) (h y)

这是我做过的测试...

composeF xa xb xc = [a . (b c) | a <- xa, b <- xb, c <- xc]

...但是我不知道如何正确地构成这些功能。

好吧,您可以简单地将lambda表达式放在列表推导的头部

composeF fs gs hs = [ \x y -> f (g x) (h y) | f <- fs, g <- gs, h <- hs]

我还随意将给定的列表重命名为fsgshs因为这些通常是为函数保留的名称(但显然asbscs并没有错,您只能向读者提供有关对象类型的提示您要处理)。 在这种情况下, composeF具有类型:

composeF :: [t1 -> t2 -> t] -> [t3 -> t1] -> [t4 -> t2] -> [t3 -> t4 -> t]

这似乎是请求的类型。

您可以在语法上进一步将lambda表达式缩短为:

\x -> f (g x) . h

所以:

composeF fs gs hs = [ \x -> f (g x) . h | f <- fs, g <- gs, h <- hs]

请注意,您将为每种组合构造一个函数,因此,假设fs长度为3, gs长度为5, hs长度为8,则生成的列表将具有3×5×8 = 120个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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