JIS X 3012:1998 プログラム言語ISLISP | ページ 16

                                                                                             71
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(assoc obj association-list) →<list> 関数
関数assocは,association-listの中に,そのcarがobjとeqlであるコンスが少なくとも一つ含まれている
場合,そのような最初のコンスを返す。そうでなければnilを返す。association-listがコンスのリストでな
い場合は,エラーが発生する(エラー名domain-error)。
例 (assoc a ((a . 1) (b . 2))) ⇒ (a . 1)
(assoc a ((a . 1) (a . 2))) ⇒ (a . 1)
(assoc c ((a . 1) (b . 2))) ⇒ nil

14. 配列

14.1 配列のクラス

 配列は,その構成要素にデータを格納する。配列の構成要素は,添字 (index) と呼
ばれる非負整数の組を使ってアクセスできる。
配列中の要素の総数は,各次元の大きさの積とする。0次元の配列も許され,この規則の結果として,
ちょうど一つの要素を格納する事ができ,添字なしにアクセスされる。
配列のクラスは複数存在する。それらの継承関係を,図1に示す。各クラスの用途を,次に示す。
・ <basic-array>
すべての配列は抽象クラス<basic-array>に属するが,(すべての抽象クラスがそうであるように)こ
のクラスは直接インスタンスをもたない。このクラスは,型の識別のためだけに用意されている。
<basic-array>は,下位クラス<basic-vector>及び<basic-array*>をもつ。これらのクラスは,重なりが
なく,配列の集合を完全に分割する。これ以外には<basic-array>の直接の下位クラスは,存在しない。
・ <basic-vector>
すべての1次元の配列は抽象クラス<basic-vector>に属するが,(すべての抽象クラスがそうである
ように)このクラスは直接インスタンスをもたない。このクラスは,型の識別のためだけに用意され
ている。
<basic-vector>は,下位クラス<general-vector>及び<string>をもつ。<basic-vector>は,付加的な処理系
定義の下位クラスをもってもよい。
備考 処理系が,ビットの1次元配列のために,特殊化された配列表現を用意する場合がある。その
場合,そのような配列表現は,<basic-vector>の下位クラスになるであろう。
・ <general-vector>
クラス<general-vector>のオブジェクトは,<object>型の要素を格納可能な1次元の配列とする。関数
create-arrayが1次元配列を作成するよう命令された場合,結果の配列は,このクラスに属する。
・ <string>
クラス<string>のオブジェクトは,<character>型の要素だけを格納可能な1次元の配列とする。関数
create-stringが用いられた場合,結果は,このクラスに属する。
・ <basic-array*>
1次元でないすべての配列は抽象クラス<basic-array*>に属するが,(すべての抽象クラスがそうで
あるように)このクラスは直接インスタンスをもたない。このクラスは,型の識別のためだけに用意
されている。
ISLISPは,<basic-array*>に直接の下位クラスを一つだけ定義する。その下位クラスを,
<general-array*>とする。<basic-array*>には,処理系定義の付加的な下位クラスが存在してもよい。

――――― [JIS X 3012 pdf 76] ―――――

72
X 3012 : 1998 (ISO/IEC 13816 : 1997)
備考 処理系が,モノクローム又はカラーのスクリーンの表示情報を保持する目的で,1ビット以上
の2次元配列のために,特殊化された配列表現を用意する場合がある。その場合,そのような
配列表現は,<basic-array*>の下位クラスになるであろう。
・ <general-array*>
クラス<general-array*>のオブジェクトは,<object>型の要素を格納可能な1次元でない配列とする。
関数create-arrayが1次元でない配列を作成するよう命令された場合,結果の配列は,このクラスに属
する。

14.2 一般配列

 クラス<general-vector>又はクラス<general-array*>に属するオブジェクトは,一般配列
(general array) と呼ばれることがある。
一般配列は,クラス<object>のいかなるオブジェクトも格納可能とする。一般配列以外の配列は,より
特殊化されたクラスのオブジェクトを格納するための制限された配列とする。
一般配列は,その配列の内容を示す並びを入れ子となったリストにして続ける#ra記法(rは配列の次元
数を表す整数)を用いて,リテラルとして表現可能とする。その構造は,次のように定義できる。r=1の
とき,配列構造は単純に (obj1...objn) とする。r>1のとき,各次元の大きさをn1,n2,...,nrとすると,配列
構造は (str1...strn1) となる。ここで,striはr−1次元の部分配列構造であり,個々の部分配列の各次元の大
きさはn2,...,nrとする。例えば,(create-array ( 2 3 4) 5)が生成する配列は,次のように表記する。
#3a (((5 5 5 5) (5 5 5 5) (5 5 5 5)) ((5 5 5 5) (5 5 5 5) (5 5 5 5)))

14.3 配列操作

 配列操作のためにISLISPは,次の関数を用意する。
(basic-array-p obj) →真偽値 関数
(basic-array*-p obj) →真偽値 関数
(general-array*-p obj) →真偽値 関数
関数basic-array-pは,objが配列(クラス<basic-array>のインスタンス)である場合はtを返し,それ以
外の場合はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
関数basic-array*-pは,objがクラス<basic-array*>のインスタンスである場合はtを返し,それ以外の場
合はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
関数general-array*-pは,objがクラス<general-array*>のインスタンスである場合はtを返し,それ以外の
場合はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
例 (mapcar (lambda (x)
(list (basic-array-p x)
(basic-array*-p x)
(general-array*-p x)))
((a b c)
"abc"
#(a b c)
#1a(a b c)
#2a((a) (b) (c))))
⇒ ((nil nil nil) (t nil nil) (t nil nil) (t nil nil) (t t t))
(create-array dimensions [initial-element]) →<basic-array> 関数

――――― [JIS X 3012 pdf 77] ―――――

                                                                                             73
X 3012 : 1998 (ISO/IEC 13816 : 1997)
関数create-arrayは,新しい配列を生成し,その配列を値として返す。dimensions引数は,非負整数のリ
ストとする。生成される配列の次元数はdimensionsの長さと一致し,各次元の大きさは,dimensionsの各
要素の値と一致する。
結果は,一次元ならばクラス<general-vector>に属し,そうでなければ<general-array*>に属する。
initial-elementが与えられれば,新しい配列の要素は,このオブジェクトで初期化され,そうでなければ
初期化は処理系定義とする。
要求された配列の割当てができない場合は,エラーが発生する(エラー名cannot-create-array)。
dimensionsが非負整数のリストでない場合は,エラーが発生する(エラー名domain-error)。
initial-elementは,いかなるISLISPオブジェクトでもよい。
例 (create-array (2 3) 0.0) ⇒ #2a((0.0 0.0 0.0) (0.0 0.0 0.0))
(create-array (2) 0.0) ⇒ #(0.0 0.0)
(aref basic-array z*) →<object> 関数
(garef general-array z*) →<object> 関数
関数arefは,整数zの並びで特定されるbasic-arrayの構成要素に格納されたオブジェクトを返す。この
並びは,basic-arrayの次元数と正確に同じ個数の要素をもたなければならず,その各々は,0 zI<diを満た
さなければならない。ここで,diは第i次元の大きさで,次元数をdとするとき,0 i<dとする。配列の
添字は,0から始まる。したがって,i番目の行は添字i−1でアクセスする。
basic-arrayが配列でない場合は,エラーが発生する(エラー名domain-error)。zのいずれかが非負整数
でない場合は,エラーが発生する(エラー名domain-error)。
関数garefは,arefと似ているが,第1引数general-arrayが,クラス<general-vector>又はクラス
<general-array*>のインスタンスでない場合は,エラーが発生する(エラー名domain-error)。
例 (defglobal array1 (create-array (3 3 3) 0)) ⇒ array1
array1
⇒ #3a(((0 0 0) (0 0 0) (0 0 0))
((0 0 0) (0 0 0) (0 0 0))
((0 0 0) (0 0 0) (0 0 0)))
(aref array1 0 1 2) ⇒0
(setf (aref array1 0 1 2) 3.14) ⇒ 3.14
(aref array1 0 1 2) ⇒ 3.14
(aref (create-array (8 8) 6) 1 1) ⇒6
(aref (create-array () 19)) ⇒ 19
(setf (aref basic-array z*) bj) →<object> 特殊形式
(set-aref obj basic-array z*) →<object> 関数
(setf (garef general-array z*) bj) →<object> 特殊形式
(set-garef obj general-array z*) →<object> 関数
これらは,aref又はgarefによって取得可能なオブジェクトをobjで置き換える。返り値は,objとする。

――――― [JIS X 3012 pdf 78] ―――――

74
X 3012 : 1998 (ISO/IEC 13816 : 1997)
basic-array,general-array及び添字zの並びに関する制約条件は,aref及びgarefのものと同じとする。
例 (setf (aref array1 0 1 2) 3.15) ⇒ 3.15
(set-aref 51.3 array1 0 1 2) ⇒ 51.3
(array-dimensions basic-array) →<list> 関数
関数array-dimensionsは,与えられたbasic-arrayの各次元の大きさをリストとして返す。basic-arrayが
クラス<basic-array>のインスタンスでない場合は,エラーが発生する(エラー名domain-error)。返り値の
リストが変更された場合は,結果は未定義とする。
例 (array-dimensions
(create-array (2 2) 0)) ⇒ (2 2)
(array-dimensions (vector a b)) ⇒ (2)
(array-dimensions "foo") ⇒ (3)

15. ベクタ

 ベクタは,1次元の配列とする。配列とベクタとの関係については,14.1による。
一般ベクタ(クラス<general-vector>のインスタンス)は,次のとおり表記する。
#(x1 x2...xn)
(basic-vector-p obj) →真偽値 関数
(general-vector-p obj) →真偽値 関数
関数basic-vector-pは,objがクラス<basic-vector>のインスタンスである場合はtを返し,それ以外の場
合はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
関数general-vector-pは,objが一般ベクタ(クラス<general-vector>のインスタンス)である場合はtを返
し,それ以外の場合はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
例 (mapcar (lambda (x)
(list (basic-vector-p x)
(general-vector-p x)))
((a b c)
"abc"
#(a b c)
#1a(a b c)
#2a((a)(b)(c))))
⇒ ((nil nil) (t nil) (t t) (t t) (nil nil))
(create-vector i [initial-element]) →<general-vector> 関数
関数create-vectorは,長さiの一般ベクタを生成して返す。initial-elementが与えられれば,新しいベク
タの要素は,このオブジェクトで初期化され,そうでなければ,初期化は処理系定義とする。要求された
ベクタの割当てができない場合は,エラーが発生する(エラー名cannot-create-vector)。iが非負整数でな
い場合は,エラーが発生する(エラー名domain-error)。initial-elementは,いかなるISLISPオブジェクト
でもよい。
例 (create-vector 3 17) ⇒ # (17 17 17)

――――― [JIS X 3012 pdf 79] ―――――

                                                                                             75
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(create-vector 2 #\a) ⇒ # (#\a #\a)
(vector obj*) →<general-vector> 関数
関数vectorは,引数objを要素とする新しい一般ベクタを返す。したがって,新たに作成されるベクタ
の長さは,引数として渡されたobjの個数と一致する。ベクタは,0から長さ未満までの範囲の整数で添
字付けされる。要求されたベクタの割当てができない場合は,エラーが発生する(エラー名
cannot-create-vector)。各objは,いかなるISLISPオブジェクトでもよい。
例 (vector a b c) ⇒ #(a b c)
(vector) ⇒ #()

16. 文字列クラス

 文字列は,<character>型の要素だけを格納可能なベクタとする。配列,ベクタ及び文
字列の関係は,14.1による。
処理系定義のいかなる文字も,文字列の要素とすることができる。ISLISPでは,文字列の添字は,0か
ら始まる。要素となるすべての文字を順に並べ,二重引用符“"”で囲むことで,文字列は表記する。文字
列中に二重引用符がある場合,その二重引用符の直前に逆斜線“\”を置かねばならない。文字列中に逆
斜線がある場合,その逆斜線の直前にもう一つの逆斜線“\”を置かねばならない。プログラムテキスト
中にリテラルとして含まれる文字列は,変更不可能なオブジェクトとする。印字文字(12.参照)以外の文
字の表現は,処理系定義とする。
(stringp obj) →真偽値 関数
関数stringpは,objが文字列(クラス<string>のインスタンス)である場合はtを返し,それ以外の場合
はnilを返す。objは,いかなるISLISPオブジェクトでもよい。
例 (stringp "abc") ⇒ t
(stringp abc) ⇒ nil
(create-string i [initial-character]) →<string> 関数
関数create-stringは,長さiの文字列を生成して返す。initial-characterが与えられれば,新しい文字列中
の文字は,この文字initial-characterで初期化され,そうでなければ,初期化は処理系定義とする。要求さ
れた文字列の割当てができない場合は,エラーが発生する(エラー名cannot-create-string)。iが非負整数で
ない場合又はinitial-characterが文字でない場合は,エラーが発生する(エラー名domain-error)。
例 (create-string 3 #\a) ⇒ "aaa"
(create-string 0 #\a) ⇒ ""
(string= string1 string2) →準真偽値 関数
(string/= string1 string2) →準真偽値 関数
(string< string1 string2) →準真偽値 関数
(string> string1 string2) →準真偽値 関数
(string>= string1 string2) →準真偽値 関数
(string<= string1 string2) →準真偽値 関数
関数string=は,string1がstring2と同じ文字列かどうか検査する。関数string<は,string1がstring2より小

――――― [JIS X 3012 pdf 80] ―――――

次のページ PDF 81

JIS X 3012:1998の引用国際規格 ISO 一覧

  • ISO/IEC 13816:1997(IDT)

JIS X 3012:1998の国際規格 ICS 分類一覧