让我们定义一个任意函数
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中实现这一目标?如果没有,那么解决这个问题的方法是什么?
我知道我可能不太清楚我发布的内容。如果需要,我可以尝试重新提出我的问题:(
答案 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版本可能更具可读性。