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



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

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

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

因此,它将使用相同的yz值来评估f,但使用x = 1x = 2x = 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

保证有更好的方法来做到这一点(仍在学习(,但你可以:

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

f'现在是部分应用f的列表

g y z= map (h -> h y z) f'

将获取这些函数中的每一个并在参数 y z 上运行它。

您可以在一行中破解所有内容。

相关内容

  • 没有找到相关文章

最新更新