mapとapply

mapはリストの各要素を1変数関数で写したリストを得る時に用います。

applyは多変数関数の引数にリストの各要素を適用する際に用います。

map

list:[a1,a2,a3] から [f(a1),f(a2),f(a3)] を得るには

map(f,list)

とします。この際、fには名前がついてないことも多いですが、そのようなときは

map(lambda([x],f(x)),list);

というようにラムダ式を用いるのが便利です。

例1.

list:[1,2,3];
map(lambda([x],x^2),list);

実行結果.

[1,2,3]
[1,4,9]

例2.

list:[1,2,3];
map(lambda([x],sin(x)),list);

実行結果.

[1,2,3]
[sin(1),sin(2),sin(3)]

例3.

list:[1,2,3];
map(lambda([x],power_mod(x,3,10)),list);

実行結果.

[1,2,3]
[1,8,7]

注意

list^2 や sin(list)としても例1、例2と同じ結果が得られます。 こちらの方が楽ですが、一般には、このような略記法が通用するとは限りません。 実際、例3と同じ結果を得ようとして、power_mod(list,3,10) とすることはできません。

apply

list:[a1,a2,a3] から f(a1,a2,a3) を得るには

apply(f,list)

とします。mapと同様に関数fに名前がついてないときは、

apply(lambda([x],f(x)),list);

というようにラムダ式を用いるのが便利です。

例1.

list:[1,2,3];
apply(max,list);

実行結果.

[1,2,3]
3

例2.

list:[1,2,3];
apply(lambda([x,y,z],x+y+z),list);

実行結果.

[1,2,3]
6