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

时间:2019-11-17 16:17:03

标签: haskell

是否可以将map与2个运算符一起使用,例如map ((*2)+3) [1,2,3,4]?如果是,怎么办?我想创建一个在列表上apply (x*2)+3的函数。

2 个答案:

答案 0 :(得分:5)

SELECT songs.title, artists.name FROM songs LEFT JOIN song_artist ON song_artist.song_id = songs.id LEFT JOIN artists ON song_artist.artist_id = artists.id 有一个功能。但是该功能可以执行您想要的任何操作。您的示例可以作为匿名函数给出,例如:

map

但是您也可以使用函数组合,在这种情况下,函数是“先做一件事然后再做另一件事”的情况下,可读性更强:

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

这反过来等于(根据所谓的“ functor定律”)

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

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

答案 1 :(得分:2)

我认为在这里首先引入lambda表达式很容易:

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

这将完全满足您的要求。您可以使用(.) :: (b -> c) -> (a -> b) -> a -> c function执行“ 功能组合”,并写成:

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

在这里,您可以将其视为函数的“链”,将输入传递到最右边的函数(此处为(*2)),然后将结果传递到最左边的函数(此处为{{1 }}。