seq - 式列の作成
|
使い方
|
|
seq(f, i = m..n)
seq(f, i = m..n, step)
seq(f, i = 1..m, step)
seq(f, i = x)
seq(f, i in x)
seq(m .. n, step)
|
|
パラメータ
|
|
f
|
-
|
任意の式
|
i
|
-
|
名前
|
m, n
|
-
|
数値
|
x
|
-
|
式
|
step
|
-
|
(オプション) 数値
|
|
|
|
|
説明
|
|
•
|
seq コマンドは値の式列を作るために用いられます。もっとも典型的な使い方は、seq(f(i), i = 1..n) で、式列 を生成します。より一般に、seq(f(i), i = m..n) は、式列 を生成します。
|
•
|
seq(f(i), i = x) の使い方は、x のそれぞれの被作用子または入力に f を適用した式列を生成します。ここで x はほとんどの場合集合またはリストですが、和や積のように op が適用できる他のどんなデータ構造でも構いません。x に tables や rtables が入力されると、x は被作用子として読み込まれません。この形の seq コマンドは、string (文字列) の中の文字に繰り返し適用することもできます。
|
•
|
seq(m..n) と seq(m..n, step) の使い方は、m から数値の式列を生成し、次に m + step を生成していきます。最後の値は n より大きくはなりません。step が省略された場合、デフォルトの増分は 1 になります。
|
•
|
seq コマンドは for ループ処理に関連しています。最初の 2 つの seq の使い方を正確に理解するには、以下に示すように for ループを用いて定義するとよいでしょう。ここで、式 f は通常 i の関数を表します。
|
seq(f, i=m..n) == S := NULL;
|
old := i;
|
for i from m to n do S := S,f end do;
|
i := old;
|
S; # 計算結果
|
seq(f, i=x) == S := NULL;
|
old := i;
|
for i in x do S := S,f end do;
|
i := old;
|
S; # 計算結果
|
|
|
|
注意 : 上記のように、seq を使用するほうが、for ループ処理を行うよりも効率的です。これは for ループ処理においては、最終的な結果を構築する過程で多くの中間的な和や積が作られるからです。特に、seq を使う場合のコストは式列の長さに比例しますが、for ループでは 2 乗に比例します。
|
|
注意 : 端点 m と n は literal の定数 (整数、分数、浮動小数点数または文字) に評価される必要があります。特別な場合として、m は infinity (無限大) に評価されてもよく、n は -infinity (マイナス無限大) に評価されても構いません。m が n より大きいとき、seq は空の式列 (NULL) を返します。
|
|
注意 : インデックス変数 i は seq の呼び出しに対して private ではありません。インデックス変数がプロシージャ内でローカルであると常に明示的に宣言することを推奨します。
|
•
|
seq と同様に働く add と mul コマンド (seq が式列を作るのに対して、この 2 つのコマンドはぞれぞれ和と積を作ることを除けば同様に働く) も参照してください。
|
•
|
seq(f(i), i in x) の使い方は seq(f(i), i = x) と等しくなります。
|
|
|
スレッド安全性
|
|
•
|
seq コマンドは、Maple 15 以後スレッドセーフです。ただし、f の評価自体がスレッドセーフである場合に限ります。 さらに、インデックス変数 i が、スレッド間で共有されないことが必要です。ローカルのプロシージャの使用を推奨します。
|
|
|
例
|
|
| (1) |
>
|
seq( sin(Pi*i/6), i=0..6 );
|
| (2) |
| (3) |
>
|
X := [seq( i, i=0..6 )];
|
| (4) |
>
|
{seq( i^2 mod 7, i=X )};
|
| (5) |
>
|
Y := [seq( i^2, i=X )];
|
| (6) |
>
|
[seq( [X[i],Y[i]], i=1..nops(X) )];
|
| (7) |
| (8) |
| (9) |
>
|
[seq( i, i=0..-infinity )];
|
| (10) |
| (11) |
| (12) |
>
|
A:=Matrix([[seq(i,i=1..3)],[seq(i,i=4..6)]]);
|
| (13) |
| (14) |
| (15) |
>
|
C := proc(f,x)
local i; # declare index variable to be local
[seq( coeff(f,x,i), i=0..degree(f,x) )];
end proc:
|
| (16) |
>
|
T := table({color="red",size="XL"});
|
| (17) |
>
|
seq( e, e=eval(T) ); #eval required for tables
|
| (18) |
|
|