将多个参数传递给map的func参数

时间:2015-06-29 17:12:23

标签: list haskell

在python中,   使用列表推导,我可以将多个参数传递给map函数的函数参数as,

  const = 2 
  def divide(x,y):
    return x/y
  [divide(x, const) for x in [2,4,6,8]]

我如何使用地图功能在haskell中做同样的事情?

像这样,

func x y = x/y

map (func x 2) [2 4 6 8]

我认为,可以使用函数currying来完成,但不确定正确的方法吗?

1 个答案:

答案 0 :(得分:7)

使用部分

你可以像这样使用部分

Prelude> let func x y = x / y
Prelude> map (`func` 2) [2,4,6,8]
[1.0,2.0,3.0,4.0]

当你在反引号中编写一个函数时,你会把它变成一个运算符 - 然后你可以在左边或右边插入值(对于x或{{1这里)。

如果您想替换y,那么您也可以使用普通部分应用程序:

x

相同
Prelude> map (func 24) [2,4,6,8]
[12.0,6.0,4.0,3.0]

使用lambda

当然如果你根本不喜欢这个,你可以随时使用lambda:

Prelude> map (24 `func`) [2,4,6,8]
[12.0,6.0,4.0,3.0]

使用list-comprehension

或者您可以像在Python中一样(使用列表推导):

Prelude> map (\x -> func x 2) [2,4,6,8]
[1.0,2.0,3.0,4.0]

好吧我想我现在可以想到没有其他(简单的);)

使用Prelude> [ func x 2 | x <- [2,4,6,8] ] [1.0,2.0,3.0,4.0]

的部分申请

flip和部分申请(我觉得有点不那么可读 - 但我发现它很有趣;):

flip

评论/ Prelude> map (flip f 2) [2,4,6,8] [1.0,2.0,3.0,4.0]

由于您只在此处理div,因此您可能希望使用Int代替div

(/)