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

Ati*_*ioA 2 haskell list partial-application higher-order-functions map-function

是否可以将 map 与带有多个参数的函数一起使用?

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

mapF x y z = map (f y z) [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

因此,它会评估f与同yz的值,但x = 1x = 2x = 3等等。

Bi *_*ico 7

您应该使用 lambda 函数,要查看此功能,让我们从使用辅助函数将 f 映射到某个列表开始。

map helper [1, 2, 3] where
  helper x = f x y z
Run Code Online (Sandbox Code Playgroud)

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

map helper [1, 2, 3] where
  helper = \x -> f x y z
Run Code Online (Sandbox Code Playgroud)

使用 lambda 语法我们不需要给我们的辅助函数一个明确的名字,它可以只是一个我们映射到输入的匿名函数

map (\x -> f x y z) [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

所以现在你可以说

mapF y z = map (\x -> f x y z) [1,2,3]
Run Code Online (Sandbox Code Playgroud)

但大概您不想x成为 1、2 和 3,您希望它成为作为参数传递给mapF. 所以你需要给它一个不同的名字:

mapF xs y z = map (\x -> f x y z) xs
Run Code Online (Sandbox Code Playgroud)

Haskell 约定将其s用作包含列表或其他容器的变量的后缀。所以如果一个值是x那么它们的列表是xs