将 map 与具有多个参数的函数一起使用
Using map with function that has multiple arguments
是否可以将 map 与带有多个参数的函数一起使用?
我想重复使用map的第二个和第三个参数作为函数的参数。
如
mapF x y z = map (f y z) [1, 2, 3]
因此它将使用相同的 y
和 z
值评估 f
,但使用 x = 1
、x = 2
、x = 3
等等。
保证有更好的方法来做到这一点(仍在学习中),但您可以:
f' = map f [1,2,3]
f'
现在是部分应用的列表 f
g y z= map (\h -> h y z) f'
将采用这些函数中的每一个,并 运行 它在参数 y z 上。
你可以在一行中破解所有内容。
您应该使用 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
使用 s
作为保存列表或其他容器的变量的后缀是 Haskell 惯例。因此,如果一个值是 x
那么它们的列表是 xs
是否可以将 map 与带有多个参数的函数一起使用?
我想重复使用map的第二个和第三个参数作为函数的参数。 如
mapF x y z = map (f y z) [1, 2, 3]
因此它将使用相同的 y
和 z
值评估 f
,但使用 x = 1
、x = 2
、x = 3
等等。
保证有更好的方法来做到这一点(仍在学习中),但您可以:
f' = map f [1,2,3]
f'
现在是部分应用的列表 f
g y z= map (\h -> h y z) f'
将采用这些函数中的每一个,并 运行 它在参数 y z 上。
你可以在一行中破解所有内容。
您应该使用 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
使用 s
作为保存列表或其他容器的变量的后缀是 Haskell 惯例。因此,如果一个值是 x
那么它们的列表是 xs