试图将映射应用于Haskell中函数的"内部"参数

dev*_*ium 3 haskell functional-programming

让我们定义一个任意函数

someFunc a b = ...
Run Code Online (Sandbox Code Playgroud)

如果我需要它,我知道我可以做类似的事情

map (someFunc a) [b0, b1, b2, ..., bn]
Run Code Online (Sandbox Code Playgroud)

我会得到结果

[(someFunc a b0), (someFunc a b1), ..., (someFunc a bn)]
Run Code Online (Sandbox Code Playgroud)

这里没有什么新东西.但是,如果不是使用地图的第二个参数来改变b,我想改变a(一个"内部"参数)?

map (someFunc ? b) [?0, ?1, ?2, ..., ?n]
Run Code Online (Sandbox Code Playgroud)

在Haskell有什么办法可以做到这一点吗?如果没有,那么解决这个问题的方法是什么?

我知道我可能不太清楚我发布的内容.如果需要,我可以尝试重新构建我的问题:(

sep*_*p2k 11

你可以使用lambda

map (\a -> someFunc a b) ...
Run Code Online (Sandbox Code Playgroud)

或更高阶函数flip,它返回给定函数及其参数翻转:

map (flip someFunc b) ...
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记(ab)使用反引号和中缀部分,例如`(\`someFunc \`b)`.通常不推荐,但可以接受双参数函数和/或打算用于中缀的函数,如`on`. (6认同)