繁体   English   中英

如何与多个操作员一起使用 Map

[英]How to use Map with more than one operator

是否可以使用带有 2 个运算符的map ,例如map ((*2)+3) [1,2,3,4] 如果是怎么办? 我想制作一个在列表上apply (x*2)+3的 function。

map单 function。 但是 function 可以为所欲为。 您的示例可以作为匿名 function 给出,例如:

map (\n -> n * 2 + 3) [1,2,3,4]

但是您也可以使用 function 组合,对于像这样的情况,您的 function 是“做一件事,然后做另一件事”的情况,这可能更具可读性:

map ((+3) . (*2)) [1,2,3,4]

这又等于(通过所谓的“函子定律”)

map (+3) . map (*2) $ [1,2,3,4]

我个人觉得这更具可读性。

我觉得这里先引入一个 lambda 表达式很容易:

map (\x -> (x*2)+3) [1,2,3,4]

这将完全符合您的要求。 您可以使用(.):: (b -> c) -> (a -> b) -> a -> c ZC1C425268E68385D14AB5074C17Z执行“ function 组合”,因此将其写为:

map ((+3) . (*2)) [1,2,3,4]

因此,在这里您可以将其视为函数的“链”,我们将输入传递给最右边的 function(此处为(*2) ),然后将结果传递给最左侧的 function (此处为(+3) )。

暂无
暂无

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

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