更改为map提供的函数的参数顺序

时间:2017-03-12 00:40:07

标签: haskell

比如说我们有一个功能

let list = [1,2,3]

列表map (divide 3) temp

我知道我可以将除法函数应用到列表中,如下所示:divide

但是如果我想交换传递给map (divide temp) 3方法的参数的顺序怎么办,那么列表中的每个元素除以3,而不是3除以元素。

类似以下divide

此外,如果start_date = Date.today.at_beginning_of_week end_date = Date.today.at_end_of_week @plantings = Planting.where('planting_date_end >= ? AND planting_date_begin <= ?', start_date, end_date) 有3个参数并且列表的每个元素都需要是中间参数,那该怎么办呢?如何做到这一点?

2 个答案:

答案 0 :(得分:2)

你可以使用divide作为中缀运算符,将其封装在这样的反对语中

map (`divide` 3) temp

或者,如果你将来遇到一个更复杂的案例,写一个lambda(匿名函数)

map (\x -> divide x 3) temp

您可能还想查看更详细的解释https://wiki.haskell.org/Anonymous_function

答案 1 :(得分:1)

只需将函数参数设为显式lambda而不是部分应用的函数:

map (\n -> divide n 3) temp