是否可以将map与带有多个参数的函数一起使用?原因是我做不到。
我想重复使用map的第二个参数作为该函数的参数。 为
mapF x y z = map (f y z) [1, 2, 3]
因此它将用相同的y和z来计算f,但x = 1,x = 2,x = 3,依此类推。
答案 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