next up previous contents index
: 関数と局所変数 : 関数 : 関数   目次   索引


リストとベクトル(配列)

ベクトルは, 6.2 節ですでに使用したが, 関数の説明にはいるまえにリスト (list) とベクトル (vector) に ついて補足説明しておこう. リストおよびベクトルともにさまざまなアルゴリズムを実現するための重要な データ構造である. リストについて詳しくは 13章で議論する. 適宜参照してほしい.

リスト型のデータはたとえばいくつかのデータをまとめて扱いたい 場合にもちいる. リストはベクトルとことなり, 実行中にサイズを変更できるが, $k$ 番目の要素に代入したりできない. それ以外の扱いはベクトルに似ている.

リスト構造の起源は Lisp 言語である. Lisp 言語ではすべてのデータをリストとして表す. Lisp 言語は一番長い歴史をもつ言語にもかかわらず現在でも いろいろな場面で利用されている. たとえば Emacs マクロとよばれるものは, Emacs Lisp と呼ばれる Lisp 言語で 記述されている. Lisp ではリストを括弧を用いて生成するが, Asir ではリストは [, ] を用いて生成する.

[345] A=[10,2];
[10,2]
[346] A[0];
10
[347] A[1];
2
[348] B=["dog","cat","fish"];
[dog,cat,fish]
[349] B[0];
dog

    
変数 A には長さ 2 のリスト [10,2] が代入された. 10 が 0 番目の元, 2 が 1 番目の元であり, それぞれ A[0], A[1] で取り出せる. リストの元は, 数字である必要はなく, 文字列でもよいし, 別のリストであってもよい.

Asir のベクトルは C 等の言語では 配列 (array) とよばれるデータ 型に似てる. Asir でもベクトルを配列と呼ぶ場合もあるので, ベクトルと配列は同一のものだとおもってよい. C の配列とことなり, Asir の配列は 何でもいれることが可能なので k 番目の要素に代入が可能で, 高速に扱うことのできる大きさが固定されたリスト構造と思っておけばよい. リストに対しては代入, たとえば A[0] = 2 といった操作ができないが, ベクトルにたいしてはその操作も可能である. 新しいベクトルは, たとえばコマンド

A=newvect(3,[10,2,5]);
で生成する. ここで 最初の 3 は, ベクトルの長さである. コマンド
newvect(3);
で長さ 3 で要素がすべて 0 のベクトルを 生成する. ベクトルからリストを生成するには 組み込み関数 vtol を用いればよい.

与えられた変数に格納されたデータが, リストかベクトルかを区別したい場合, 組み込みの type 関数を用いる. 変数 A に代入されているものが, ベクトルである場合, type(A) は 5 を戻す. 変数 A に代入されているものが, リストである場合, type(A) は 4 を戻す.

ベクトルがでてきたついでに, 行列についても簡単に説明しておこう. Asir では, たとえば
A=newmat(2,2,[[1,2],[3,4]]); $2 \times 2$ 行列 $\pmatrix{1 & 2 \cr 3 & 4 \cr}$ を生成し, 変数 A に代入する. 行列の (I,J) 成分は A[I][J] で参照する. ただし, 普通の数学の添字とことなり, 添字は $0$ から始まる.



Nobuki Takayama 平成15年9月12日