在python中,通过对列表的理解,我可以将多个参数传递给map函数的函数参数,
const = 2
def divide(x,y):
return x/y
[divide(x, const) for x in [2,4,6,8]]如何在haskell中使用map函数进行同样的操作?
就像这样,
func x y = x/y
map (func x 2) [2 4 6 8]我认为,它可以使用函数运行,但不确定正确的方式?
发布于 2015-06-29 17:15:18
使用区段
您可以使用这样的部分:
Prelude> let func x y = x / y
Prelude> map (`func` 2) [2,4,6,8]
[1.0,2.0,3.0,4.0]当你用背板写一个函数的时候,你可以把它写成一个操作符,然后你可以把值插入到左边或者右边(这里是x或y )。
如果您想替代x,那么您也可以使用正常的部分应用程序:
Prelude> map (func 24) [2,4,6,8]
[12.0,6.0,4.0,3.0]这和
Prelude> map (24 `func`) [2,4,6,8]
[12.0,6.0,4.0,3.0]用朗姆达
当然,如果您根本不喜欢这样,您可以始终使用lambda的:
Prelude> map (\x -> func x 2) [2,4,6,8]
[1.0,2.0,3.0,4.0]使用列表理解
或者您也可以像在Python中那样做(使用列表理解):
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而不是(/)。
Prelude> map (`div` 2) [2,4,6,8]
[1,2,3,4]https://stackoverflow.com/questions/31121640
复制相似问题