複数データの型
系列、リスト、集合、配列(MATLABのセルに相当?)、実数配列、行列、表、文字列があります。型はtypeで調べます。配列と数値配列では要素の順番の定義が必要です。配列・数値配列・行列では一旦リストを作成後にarray,hfarray,matrix関数で定義します。構造体の作成方法は?です。尚コメント文は//の後に続けます。
a:=1,2,3,4:(a,type(a));//系列
b:=(1,2,3,4):(b,type(b));//系列
c:=[1,2,3,4]:(c,type(c));//リスト
d:={1,2,3,4}:(d,type(d));//集合
e:=array(1..2,1..2,[[1,2],[3,4]]):(e,type(e));//配列
f:=hfarray(1..2,1..2,[[1,2],[3,4]]):(f,type(f));//実数配列
g:=matrix([[1,2],[3,4]]):(g,type(g));//行列
h:=table(a[1,1]=1,a[1,2]=2,a[1,3]=3,a[1,4]=4):(h,type(h));//表
i:="Hallo World":(i,type(i));
中身を表示させます。表の中身を表示させる方法は?です。
順番は1,2,3...ですが、配列と数値配列では定義によって異なります。
配列・数値配列と表以外は..を使えば連続して要素の抽出ができます。
a[1..2];b[1..2];c[1..2];d[1..2];
e[1,1];f[1,1];g[1..2,1];h[1];i[1..2];
delete a,b,c,d,e,f,g,h,i;
a:=array(-3..3,[1,2,3,4,5,6,7]);//a[-3]~a[3]の定義
a[1];//要注意!
delete a;
$を使うと連続した要素を作成するのに便利です。
a:=(x $ x=1..5);//系列
b:={a};//集合
c:=[a];//リスト
d:=array(1..5,c);//配列
e:=hfarray(1..5,c);//数値配列
f:=matrix(c);
delete a,b,c,d,e,f;
$を2回使うことでゼロ配列やゼロ行列を作成します。
a:=[[0 $ 3] $ 4];//リスト
b:=array(1..4,1..3,a);//配列
c:=matrix(a);//行列
delete a,b,c;
三次元配列・行列を作成しました。要素の抽出は行列では3次元以降は指定できません。
a:=[[[0 $ 2] $ 3] $ 4];//リスト
b:=array(1..4,1..3,1..2,a);
b[1,1,1];
c:=matrix(a);c[1,1];
delete a,b,c;
array(1..4, 1..3, 1..2,
(1, 1, 1) = 0,
(1, 1, 2) = 0,
(1, 2, 1) = 0,
(1, 2, 2) = 0,
(1, 3, 1) = 0,
(1, 3, 2) = 0,
(2, 1, 1) = 0,
(2, 1, 2) = 0,
(2, 2, 1) = 0,
(2, 2, 2) = 0,
(2, 3, 1) = 0,
(2, 3, 2) = 0,
(3, 1, 1) = 0,
(3, 1, 2) = 0,
(3, 2, 1) = 0,
(3, 2, 2) = 0,
(3, 3, 1) = 0,
(3, 3, 2) = 0,
(4, 1, 1) = 0,
(4, 1, 2) = 0,
(4, 2, 1) = 0,
(4, 2, 2) = 0,
(4, 3, 1) = 0,
(4, 3, 2) = 0
)
乱数はrandom()を使います。MATLABのように使うにはコツがあります。
a:=random(0..5)://関数を定義したことになる
a:=[[a() $ i=1..3] $ i=1..4];//リスト
a:=array(1..4,1..3,a);//配列
a:=matrix(a);//二次元だと配列⇔行列の変換が簡単です。
delete a;
行列→配列はexpr、行列・配列→リストはopを使います。
x:=random(0..9);//乱数関数を作成
a:=[x() $ i=1..12];//要素数12の乱数リストを作成
b:=matrix(3,4,a);//3×4の行列を作成。
c:=expr(b);//配列に変換。
type(c);
d:=op(b[2,1..4]);//2行目の行列の要素をリストとして抽出