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