Haskell 带列表的函数组合

Haskell 带列表的函数组合,haskell,Haskell,我想创建一个接收三个列表的函数:第一个是二进制函数列表,第二个和第三个是一元函数列表。 结果必须是这样的: \x y -> f (g x) (h y) 这是我做的一个测试 composeF xa xb xc = [a . (b c) | a <- xa, b <- xb, c <- xc] composefxaxbxc=[a.(bc)| a你可以简单地在列表的头部放一个lambda表达式: composeF fs gs hs = [ \x y -> f (g

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

 \x y -> f (g x) (h y)
这是我做的一个测试

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

composefxaxbxc=[a.(bc)| a你可以简单地在列表的头部放一个lambda表达式:

composeF fs gs hs = [ \x y -> f (g x) (h y) | f <- fs, g <- gs, h <- hs]
这似乎是请求的类型

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

\x -> f (g x) . h
因此:


composeF fs gs hs=[\x->f(gx).h | f你可以简单地在列表的头部放置一个lambda表达式

composeF fs gs hs = [ \x y -> f (g x) (h y) | f <- fs, g <- gs, h <- hs]
这似乎是请求的类型

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

\x -> f (g x) . h
因此:


composeF fs gs hs=[\x->f(gx).h | f您想为每个组合生成一个函数,还是为每个组合生成一个以上的
zip
样式?为每个组合生成一个函数:)您想为每个组合生成一个函数,还是为每个组合生成一个以上的
zip
样式o更快(当然),而带有
\x y->…
的版本显然是一个需要两个参数的函数,因此我认为它在这里唯一重要的方面是更优化的:易读性。@amalloy:将它改为语法缩短,更好吗?如果必须的话。我不建议使用更短、可读性较差的版本。为什么要停下来呢关于推荐
(.h).f.g
?@amalloy:因为基于这个问题,我认为目前我们不应该引入Haskell的水平;每个答案都应该尝试将用户推高一个水平,而不是3:)谢谢,解释得很好。我会称之为缩短,而不是优化。当然,它不会更快,而带有
\x y->…
的版本显然是一个需要两个参数的函数,因此我认为它在这里唯一重要的方面是更优化的:易读性。@amalloy:将它改为语法缩短,更好吗?如果必须的话。我不建议使用更短、可读性较差的版本。为什么要停下来呢推荐
(.h.f.g
?@amalloy:因为基于这个问题,我认为目前我们不应该引入Haskell的级别;每个答案都应该尝试将用户推高一个级别,而不是3:)