map - プロシージャを式の被作用子のそれぞれに適用する
map2 - 最初の引数を指定してプロシージャを式の被作用子のそれぞれに適用する
|
使い方
|
|
map(fcn, expr, arg1, ..., argN)
map2(fcn, arg1, expr, arg2, ..., argN)
map[n](fcn, arg1, ..., argn-1, expr, argn, ..., argN)
map[evalhf](fcn, expr, ...)
map[inplace](fcn, expr, ...)
|
|
パラメータ
|
|
fcn
|
-
|
プロシージャまたは名前
|
expr
|
-
|
任意の式
|
argN
|
-
|
(オプション) fcn への追加の引数
|
n
|
-
|
正の整数
|
|
|
|
|
説明
|
|
•
|
map コマンドは fcn を expr の被作用子または要素に適用します。
|
•
|
map(fcn, expr, arg1, ..., argN) は expr の被作用子または要素のそれぞれに fcn(elem, arg1, ..., argN) を適用します。同様に map2(fcn, arg1, expr, arg2, ..., argN) は expr の被作用子または要素のそれぞれに fcn(arg1, elem, arg2, ..., argN) を適用します。map[3](fcn, arg1, arg2, expr, arg3, ..., argN) は expr の被作用子または要素のそれぞれに fcn(arg1, arg2, elem, arg3, ..., argN) を適用します。
|
•
|
map のコールの結果は、expr のコピーで、expr の i 番目の被作用子は i 番目の被作用子に fcn を適用した結果で置き換えられます。これが expr のすべての被作用子に対して行われます。atomic タイプの式については、map(fcn, expr) は fcn(expr) と同じです。table または rtable (たとえば、Array、Matrix、または Vector) については、fcn は各被作用子ではなく各要素を適用します。
|
•
|
fcn が 2 つ以上の引数をとる場合、追加引数 arg2, arg3, ..., argn として指定され、単に fcn に第 2、第 3 ... 第 n 引数として渡されます。
|
•
|
expr が要素 (または被作用子) を持っていない場合、現状のまま返されます。たとえば、map(f, [ ]) は空のリスト [ ] を返します。
|
•
|
いくつかのオプションはインデックス同様に大括弧で map コマンドに指定できます。これらのオプションは、そのオプションのみ、または他のオプションと一緒に組み合わせて使用することができます。
|
•
|
evalhf オプションは、rtable にマッピングするときのみ適用します。map 関数に適用する前に、元の rtable のコピーは datatype=float[8] 記憶域で作られています。fcn の各アプリケーションは、evalhf で評価します。ハードウェアの浮動小数点でのみ動作します。
|
•
|
inplace オプションは、長方形の記憶域 rtable (インデックス関数なし) にマッピングするときのみ適用します。inplace が指定されたとき、入力 rtable は直接更新されます。結果はコピーではなく、元の expr rtable の更新になります。
|
•
|
Maple では、文字列は atomic な式であるため、map を使用してプロシージャを文字列に map することはできません。しかし、StringTools パッケージはこれを機能的に行う Map エクスポートを提供します。
|
|
|
スレッド安全性
|
|
•
|
map および map2 コマンドはスレッドセーフです。ただし、式 fcn の評価がスレッドセーフである場合に限ります。
|
|
|
例
|
|
| (1) |
| (2) |
| (3) |
| (4) |
>
|
map(proc(x,y) x^2+y end proc, [1,2,3,4], 2);
|
| (5) |
| (6) |
>
|
map2(op, 1, [a+b,c+d,e+f]);
|
| (7) |
つぎの例は、map および map2 コマンドを使用することにより、n 次の有限アーベル群の数を数えます。
>
|
NumberOfAbelianGroups := (n::posint) -> mul(k, k = map(combinat:-numbpart, map2(op, 2, ifactors(n)[2] ) ) );
|
| (8) |
>
|
NumberOfAbelianGroups(4);
|
| (9) |
>
|
NumberOfAbelianGroups(6);
|
| (10) |
>
|
NumberOfAbelianGroups(768);
|
| (11) |
map コマンドは atomic タイプに使用することができます。
>
|
sum_to_product:=proc(expr)
if expr::atomic then
expr;
elif expr::`+` then
`*`(op(expr));
else
map(procname,expr); end if;
end proc:
|
>
|
sum_to_product(3+4*x^2+3*(x+2)*(x+7)^2);
|
| (12) |
>
|
A := Array([1,2,3,4],datatype=float[8]);
|
| (13) |
>
|
map[evalhf,inplace,2]( (a,b)->a^b, 2, A );
|
| (14) |
| (15) |
|
|
参照
|
|
applyop, combinat[numbpart], curry,
, ifactors, LinearAlgebra[Map], mul, op, operators/elementwise, operators/functional, proc, rcurry, select, spec_eval_rules, StringTools[Map], type/atomic
|
|