在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来完成,但不确定正确的方法吗?
答案 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:
Prelude> map (24 `func`) [2,4,6,8]
[12.0,6.0,4.0,3.0]
或者您可以像在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
:
(/)