函数作用于表达式的部分项
当有一系列元素时,经常需要将一个函数分别作用于每一项中,这可以在 Mathematica 中用 Map 来实现.

作用于列表中的每一个元素.
| Out[1]= |  |
用
Map 将

作用于每一个列表上.
| Out[3]= |  |
| Map[f,{a,b,...}] | 将 f 作用于列表的每一个元素上得到 |
将函数作用于列表中的每一个元素上.
Map[f, expr] 的作用是将函数 f 作用于表达式 expr 的每一个元素和组成部分上. 可以把 Map 用于任何表达式,不仅仅在列表上.
将

作用于和式的每个元素.
| Out[4]= |  |
| Out[5]= |  |
Map[f, expr] 将 f 作用于表达式 expr 第一层的项. 用 MapAll[f, expr] 可以将 f 作用于表达式 expr 的所有 项.
定义2x2矩阵

.
| Out[6]= |  |
Map 将

作用于

的第一层,即矩阵各行.
| Out[7]= |  |
MapAll 将

作用于

的所有元素上. 如果仔细查看该表达式,将看到

在每一项展开.
| Out[8]= |  |
一般说来,如 "表达式的层次结构" 中讨论的,可以通过指定层的方法用 Map 将函数作用于表达式的一些项上.
将

作用于

的第2层元素上.
| Out[9]= |  |
| Out[10]= |  |
| Map[f,expr] 或 f/@expr | 将 f 作用于表达式 expr 的第一层 |
| MapAll[f,expr] 或 f//@expr | 将 f 作用于表达式 expr 的所有项 |
| Map[f,expr,lev] | 将 f 作用于表达式 expr 的第 lev 层的每项 |
将函数作用于表达式不同部分的方法.
可以通过指定层的方法用 Map 将函数作用于表达式的一些项上. 通过指定层次可以使函数作用于表达式的某些项上,用MapAt 可以通过列出元素标号使函数作用于表达式的某些项上,请参见 "表达式的项".
| Out[11]= |  |
| Out[12]= |  |
给出

在

中出现的位置.
| Out[13]= |  |
| Out[14]= |  |
为了避免混淆,即使在仅有一个下标时,也应该以列表的形式指定每一项.
| Out[15]= |  |
| MapAt[f,expr,{part1,part2,...}] | 将 f 作用于 expr 中指定的项 |
将函数作用于表达式中指定的项.
| Out[16]= |  |
给出

的完全格式.
Out[17]//FullForm= |
| |  |
MapAt 可用在任何表达式中. 注意,其中指定项的索引是基于表达式的完全格式.
| Out[18]= |  |
| MapIndexed[f,expr] | 将 f 作用于表达式的元素,f 的第二个变量给出表达式的每个元素项的位置 |
| MapIndexed[f,expr,lev] | 将 f 作用于表达式指定层的元素,f 的第二个变量给出表达式中每项的指标号 |
函数作用于表达式中的项和其标号上.

作用于一个列表的每个元素上,其第2个自变量给出元素的标号

.
| Out[19]= |  |

作用于矩阵的所有层.
| Out[20]= |  |
Map 把一元函数作用于一个表达式的项上;MapThread 将多元函数作用于多个表达式.
| MapThread[f,{expr1,expr2,...}] | 将 f 作用于每个表达式 中对应的项 |
| MapThread[f,{expr1,expr2,...},lev] | 将 f 作用于 的指定层 |
同时将函数作用于多个表达式.

作用于相应的元素.
| Out[21]= |  |
| Out[22]= |  |
Map 等函数可以通过项的修改产生表达式,但有时不需要产生新的表达式,仅需要查看某些表达式,或者仅对表达式中的某些项进行运算. 一个典型的情况是当你所运用的函数具有某些"副作用"时,如进行赋值或产生输出时.
| Scan[f,expr] | 求出 f 作用于 expr 中各项时的函数值 |
| Scan[f,expr,lev] | 求出 f 作用中 expr 中第 lev 层项时的函数值 |
计算表达式中各项的函数值.
用
Map 将

作用于一个列表而产生新的列表.
| Out[23]= |  |
Scan 计算将函数作用于每一个元素的结果,但不产生新的表达式.