映射的数学基础允许很多优化(英语:Program optimization)。复合定律确保了如下二者:
(map f . map g) list
map (f . g) list
导致相同的结果;就是说
map
(
f
)
∘
map
(
g
)
=
map
(
f
∘
g
)
{\displaystyle \operatorname {map} (f)\circ \operatorname {map} (g)=\operatorname {map} (f\circ g)}
。但是第二种形式比第一种形式在计算上更加有效率,因为每个map要求从头重建整个列表。因此,编译器将尝试将第一种形式变换第二种形式;这种类型的优化叫做“映射融合”,是循环融合(英语:Loop fission and fusion)的函数式类似者[4]。
映射函数可以并经常依据fold比如foldr来定义,这意味着可以做“map-fold融合”:foldr f z . map g等价于foldr (f . g) z。
在一个单链表上的map实现不是尾递归的,所以它在调用于大型列表的时候,可能在栈上建造大量的帧。很多语言作为替代的提供“逆向map”函数,它等价于逆转一个映射后的列表,但它是尾递归的。下面是利用了左fold函数的一个实现:
reverseMap f = foldl (\ys x -> f x : ys) []
因为逆转单链表也是尾递归的,reverse和reverse-map可以复合起来以尾递归方式进行正常的map,尽管这需要在这个列表上进行两趟。