将map与具有多个参数的函数一起使用

时间:2018-06-28 01:41:19

标签: list haskell higher-order-functions map-function partial-application

是否可以将map与带有多个参数的函数一起使用?原因是我做不到。

我想重复使用map的第二个参数作为该函数的参数。 为

mapF x y z = map (f y z) [1, 2, 3]

因此它将用相同的y和z来计算f,但x = 1,x = 2,x = 3,依此类推。

2 个答案:

答案 0 :(得分:3)

肯定会有更好的方法(仍在学习中),但是您可以:

f' = map f [1,2,3]

f'现在是部分应用的f

的列表
g y z= map (\h -> h y z) f'

将采用所有这些功能,并在参数y z上运行它。

您可以将所有内容全部打包在一起。

答案 1 :(得分:3)

您应该使用lambda函数,要查看此作品的效果,请先使用辅助函数将f映射到某些列表。

map helper [1, 2, 3] where
  helper x = f x y z

在Haskell中,函数有两种语法,因此让我们使用lambda语法定义我们的辅助函数:

map helper [1, 2, 3] where
  helper = \x -> f x y z

使用lambda语法,我们无需为辅助函数赋予明确的名称,它可以只是我们在输入上映射的匿名函数

map (\x -> f x y z) [1, 2, 3]

所以现在你可以说

mapF y z = map (\x -> f x y z) [1,2,3]

但是大概您不希望x成为1、2和3,而是希望它成为列表 您将其作为参数传递给mapF。所以你需要给它起一个不同的名字:

mapF xs y z = map (\x -> f x y z) xs

Haskell约定使用s作为保存列表或其他容器的变量的后缀。因此,如果一个值为x,则它们的列表为xs