リストや式への関数の部分的適用
リストの取扱いにおいて,リストの要素ひとつひとつに関数を作用させなければならないときがある.そのようなときは,Mapを使う.
入力したリストの各要素に

を適用する.
| Out[1]= |  |
入力したリストの最初の2要素を抽出する関数を定義する.
Mapを作用させ,

をリストの各要素に適用させる.
| Out[3]= |  |
| Map[f,{a,b,...}] | 入力リストの各要素(第1レベル)に f を作用させ,リスト を構成する |
リスト要素への関数の適用
Map[f, expr]を使うと,関数 f を式 expr の各要素に個別に適用することができる.Map適用の対象になる式はリストだけでなくどんな式でもよい.
加法式の各要素に

を適用させる.
| Out[4]= |  |
こうすると,

の各引数に
Sqrtを適用させることができる.
| Out[5]= |  |
Map[f, expr]は,関数 f を式 expr の第1レベルに適用させるためにある.関数 f を式 expr の全部分に適用させるにはMapAll[f, expr]を使う.
2x2行列

を定義しておく.
| Out[6]= |  |
Mapを使い,

の第1レベルに

を適用させる.この場合,第1レベルは行列の列に相当する.
| Out[7]= |  |
MapAllを使うと,

は

の全レベルに適用される.出力された式を見ると,関数

がすべての部分に適用されているのが分かる.
| Out[8]= |  |
Mapの使用において,「式におけるレベル」で説明してあるレベルの指定法を使うことで,式の任意部分に関数を適用させることもできる.
レベル2の

の部分だけに

を適用させる.
| Out[9]= |  |
Heads->Trueの設定をしておくと,要素だけでなく各部分の頭部にも

を適用させることができる.
| Out[10]= |  |
| Map[f,expr] または f/@expr | 式 expr のレベル1の各部分に関数 f を適用する |
| MapAll[f,expr] または f//@expr | 式 expr にあるすべての部分に関数 f を適用する |
| Map[f,expr,lev] | 式 expr の任意レベル lev の各部分に関数 f を適用する |
式の違った部分に関数を適用させるためのいくつかの方法
Mapにレベル指定をしておくことで,適用させたい関数を式のどのレベルにでも適用させることが可能である.また,MapAtを使えば,関数を適用させたい式の部分を位置で指定することもできる.位置は,「式の部分抽出」で説明してある添数の指定法に従い指定する.
| Out[11]= |  |
| Out[12]= |  |

の中で

が現れる位置のリストを作る.
| Out[13]= |  |
| Out[14]= |  |
まぎらわしさを避けるため,位置はリスト形式で指定する必要がある.指定する添数が1つしかない場合もである.
| Out[15]= |  |
| MapAt[f,expr,{part1,part2,...}] | f を式 expr の指定された部分に適用する |
式の任意部分への関数の適用
| Out[16]= |  |
完全形で

の内容を確認する.
Out[17]//FullForm= |
| |  |
MapAtはどんな式にも使えるが,部分は完全形の並び順に基づいて指定されることに注意.
| Out[18]= |  |
| MapIndexed[f,expr] | 式の要素に f を適用する(各要素の添数を第2引数とした f を返す) |
| MapIndexed[f,expr,lev] | 式において任意のレベルの各部分に f を適用する(各部分の添数からなるリストを第2引数とした f を返す) |
式の部分と添数への関数の適用
入力リストの各要素に

を適用させる.結果は,要素の添数を

の第2引数とした形で得ることができる.
| Out[19]= |  |
行列のレベル1,2の両方に

を適用させる.
| Out[20]= |  |
Mapを使うことで,単引数の関数をある式の任意部分に適用することができる.しかし,関数が複数の引数を必要とし,それを複数の式に並列的に適用したい場合には使えない.そのようなときは,MapThreadを代りに使う.
| MapThread[f,{expr1,expr2,...}] | の複数式において同じ位置の要素をまとめ,各まとまりに対して f を適用する |
| MapThread[f,{expr1,expr2,...},lev] | の複数式において指定したレベルにある同じ位置の部分をまとめ,各まとまりに対して f を適用する |
複数式への関数の同時適用
リストにおける同じ位置の要素でペアを組み,ペアごとに

を適用する.
| Out[21]= |  |
MapThreadの適用対象となる式はいくつあっても構わないが,それらは同じ構造であることが必要である.
| Out[22]= |  |
Map等の関数を使うことで,部分的に変更した式を生成することができる.場合によっては,新しい式を構築しないで,単に特定の関数を式の部分に作用させる,ということだけを行いたい.例えば,適用させる関数が割当て操作や出力の生成等の副作用をもたらす場合はこれに当たる.
| Scan[f,expr] | 式 expr の各要素に f を順次適用し評価する |
| Scan[f,expr,lev] | 式 expr の特定レベル lev の各部分に f を順次適用し評価する |
複数式の部分への関数の順次適用と評価
Mapは,入力リストの各要素に

を適用させた新たなリストを構築する.
| Out[23]= |  |
Scanは,関数を各要素に適用することで得られた結果を評価はするが,新たな式は生成しない.
Scan操作は,深さ優先探索で(木表示の葉の部分)から始まる.