当前位置:  开发笔记 > 编程语言 > 正文

功能组合与列表

如何解决《功能组合与列表》经验,为你挑选了1个好方法。

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

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

这是我做过的测试......

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

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



1> Willem Van O..:

那么你可以简单地将lambda表达式放在列表理解的头部:

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

我也冒昧地将给定的列表重命名为fs,gs并且hs因为这些通常是为函数保留的名称(但显然没有任何问题as,bs并且cs,您只给读者一个关于您想要处理的对象类型的提示).在那种情况下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个元素.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有