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

时间:2010-12-01 22:20:52

标签: haskell functional-programming

让我们定义一个任意函数

someFunc a b = ...

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

的事情
map (someFunc a) [b0, b1, b2, ..., bn]

我将得到结果

[(someFunc a b0), (someFunc a b1), ..., (someFunc a bn)]

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

map (someFunc ? b) [?0, ?1, ?2, ..., ?n]

有没有办法在Haskell中实现这一目标?如果没有,那么解决这个问题的方法是什么?

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

2 个答案:

答案 0 :(得分:11)

你可以使用lambda

map (\a -> someFunc a b) ...

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

map (flip someFunc b) ...

答案 1 :(得分:4)

您可以使用

flip :: (a -> b -> c) -> b -> a -> c

所以你会说

map (flip someFunc b) [a1...]

对于具有更多参数的更复杂的情况,您将不得不使用lambda。理论上 你可以随时使用翻转和参数的正确组合来完成它,但lambda版本可能更具可读性。