Haskell中如何将列表元素作为非交换二元函数左参数与固定值映射
实现方案
有三种常用的写法可以满足需求:
- 第一种是显式lambda写法,可读性最高,不需要依赖额外函数:
map (\a -> foo a x) [1..y]
这里的lambda接收列表中的每个元素a作为第一个参数传入foo,固定x为第二个参数。
- 第二种是用标准库的
flip函数反转参数顺序:flip的作用是交换二元函数的两个参数传入顺序,类型为(a -> b -> c) -> b -> a -> c,写法如下:
map (flip foo x) [1..y]
flip foo x等价于上面的lambda表达式,逻辑完全一致。
- 第三种是用中缀运算符区段(section)的简写:
Haskell中可以把普通前缀函数用反引号包裹当作中缀运算符使用,固定第二个参数的区段写法刚好符合需求:
map (`foo` x) [1..y]
这种写法最简洁,也是Haskell社区比较常用的习惯写法。
内容的提问来源于stack exchange,提问作者CoffeeKid
相关产品推荐
相关产品推荐

