首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递多个参数到map的func参数

问传递多个参数到map的func参数
EN

Stack Overflow用户
提问于 2015-06-29 17:12:23
回答 1查看 2.2K关注 0票数 3

在python中,通过对列表的理解,我可以将多个参数传递给map函数的函数参数,

代码语言:javascript
复制
  const = 2 
  def divide(x,y):
    return x/y
  [divide(x, const) for x in [2,4,6,8]]

如何在haskell中使用map函数进行同样的操作?

就像这样,

代码语言:javascript
复制
func x y = x/y

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

我认为,它可以使用函数运行,但不确定正确的方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-29 17:15:18

使用区段

您可以使用这样的部分:

代码语言:javascript
复制
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,那么您也可以使用正常的部分应用程序:

代码语言:javascript
复制
Prelude> map (func 24) [2,4,6,8]
[12.0,6.0,4.0,3.0]

这和

代码语言:javascript
复制
Prelude> map (24 `func`) [2,4,6,8]
[12.0,6.0,4.0,3.0]

用朗姆达

当然,如果您根本不喜欢这样,您可以始终使用lambda的:

代码语言:javascript
复制
Prelude> map (\x -> func x 2) [2,4,6,8]
[1.0,2.0,3.0,4.0]

使用列表理解

或者您也可以像在Python中那样做(使用列表理解):

代码语言:javascript
复制
Prelude> [ func x 2 | x <- [2,4,6,8] ]
[1.0,2.0,3.0,4.0]

好的,我想现在我想不出其他(容易)的;)

在flip中使用局部应用程序

flip和部分应用程序(我认为它的可读性有点差--但我觉得有点好笑):

代码语言:javascript
复制
Prelude> map (flip f 2) [2,4,6,8]
[1.0,2.0,3.0,4.0]

备注/ div

由于您在这里只处理Int的问题,您可能希望使用div而不是(/)。

代码语言:javascript
复制
Prelude> map (`div` 2) [2,4,6,8]
[1,2,3,4]
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31121640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档