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

6
X 3012 : 1998 (ISO/IEC 13816 : 1997)
1.7.10 動的変数 (dynamic variable) 最も最近に束縛を設定した活性ブロックによって,その束縛が決定
される変数。静的原理によって,静的に自明なブロックによって束縛が決定されるものではない。
1.7.11 評価 (evaluation)実行のために準備された評価形式の計算。その結果は,値及び/又は副作用
となる。
1.7.12 実行 (execution) 活動の並び。活動は入れ子になることもある。
1.7.13 拡張 (extension)この規格の要求に対する処理系定義の追加事項であり,次の条件をすべて満た
すもの。
・ 特定の識別子の使用を禁止することを除き,この規格に適合するISLISPテキストの正当性を損なわ
ない。
・ エラーを通知するようこの規格が要求している動作の集合を変更しない。
・ 処理系依存と指定されている機能の状態を変更しない。
1.7.14 評価形式 (evaluation form) プログラムテキスト中の,構文的に正しい単位であり,実行のため
に準備することが可能であるもの。
1.7.15 関数 (function) SLISPオブジェクトであり,引数を伴って呼び出され,計算(副作用を伴って
もよい。)を行い,値を返すもの。
1.7.16 包括関数 (generic function) 関数であり,その呼出しの際の振る舞いが引数の値の属するクラス
によって決定され,一般的には複数のメソッドによって構成されるもの。
1.7.17 識別子 (identifier) ISLISPオブジェクトを指定する静的構成要素(字句要素)。ISLISPテキスト
をデータ構造で表現する場合,識別子は記号で表現する。
1.7.18 変更不可能な束縛 (immutable binding) 束縛が変更不可能であるとは,識別子とそれが表現する
オブジェクトとの関係が変更できないことを意味する。変更不可能な束縛を変更しようと試みた場合は,
違反とする(エラー名immutable-binding)。
1.7.19 変更不可能なオブジェクト (immutable object) オブジェクトが変更不可能であるとは,それが
変更できないことを意味する。変更するための演算子が用意されていない場合,及び変更を行う演算子の
使用を禁止する何らかの制約がある場合に,変更不可能となる。特にことわらない限り,適合するプロセ
ッサは,変更不可能なオブジェクトを変更する試みを検出しなくてもよい。変更不可能なオブジェクトを
変更する試みが行われた場合は,結果は未定義とする。
1.7.20 処理系定義 (implementation defined) ISLISPプロセッサごとに異なるかも知れない機能である
が,個々のプロセッサごとに完全に定義されているもの。
1.7.21 処理系依存 (implementation dependent) ISLISPプロセッサごとに異なるかも知れない機能であ
るが,個々のプロセッサによっては必ずしも定義されていないもの。
備考 適合するISLISPテキストは,処理系依存の機能に依存してはならない。
1.7.22 継承 (inheritance) クラスとその(直接又は間接の)上位クラスとの関係であり,上位クラスの
構造及び振る舞いをそのクラスに写像する関係。ISLISPは,制限された多重継承を可能とする。すなわち,
クラスは,直接の上位クラスを同時に複数もつことが可能である。
1.7.23 (クラスの)インスタンス (instance)クラスの直接インスタンス又はその下位クラスのインス
タンス。
プログラム中に,表現が定数として直接現れているオブジェクト。
1.7.24 リテラル (literal)
1.7.25 メタクラス (metaclass) インスタンスがクラスであるクラス。

――――― [JIS X 3012 pdf 11] ―――――

                                                                                              7
X 3012 : 1998 (ISO/IEC 13816 : 1997)
1.7.26 メソッド (method)特定のパラメタ記述に対応して,包括関数の,クラスに固有な振る舞い及び
操作を定義する実体。
ISLISPプロセッサが生成,破壊,操作,比較,格納,入力又は出力する
1.7.27 オブジェクト (object)
ことができるものは,すべてオブジェクトである。特に,関数はISLISPオブジェクトである。関数に引数
として渡され,値として返され,変数に束縛され,構造体の一部となり得るオブジェクトを第1級オブジ
ェクト (first-class object) と呼ぶ。
1.7.28 演算子 (operator) 複合形式の第1要素であり,その評価形式が特殊形式であることを示す予約
された名前,マクロの名前,ラムダ式又は関数の名前空間に属する識別子。
1.7.29 パラメタ記述 (parameter profile) メソッドのパラメタリストであり,それぞれのパラメタには,
そのクラス名が付随する。パラメタにクラス名が付随しない場合,そのパラメタは,最も一般的なクラス
に属する。
1.7.30 場所 (place) オブジェクトは場所に格納して,後で取り出すことができる。場所は,評価形式に
よって指定され,setfの第1引数となり得る。このように使われた場合,オブジェクトは,その場所に格
納される。評価形式がsetfの第1引数以外として使用された場合は,格納されているオブジェクトが取り
出される。場所として許される評価形式の一覧を,setfの規定で示す。
1.7.31 位置 (position)
a) 引数位置 評価形式の第1要素以外の要素が現れる位置。
b) 演算子位置 評価形式の第1要素が現れる位置。
1.7.32 処理 (process) 実行準備されたISLISPテキストの実行。
1.7.33 プロセッサ (processor) ISLISPテキスト(又はそれと等価なデータ構造)を入力として受け入れ,
それを実行のために準備し,結果を実行して値と副作用とを生成するシステム又は機構。
1.7.34 プログラム (program)評価する式の集合体であり,その特性は文脈に依存する。この規格では,
“プログラム”という用語は,抽象的にだけ使用する。すなわち,プログラムに対する特定の構文は存在
しない。
1.7.35 有効範囲 (scope) 識別子の有効範囲とは,その識別子の意味が定義されているテキスト部分。す
なわち,その識別子が指し示すISLISPオブジェクトが存在するテキスト部分。
1.7.36 スロット (slot)インスタンスの名前付きの構成要素であり,スロットアクセスメソッドを使っ
てアクセスできるもの。インスタンスの構造は,そのスロットの集合によって定義される。
この規格の要求に適合する(すなわち,ISLISPの構文及び静的意味を有する)
1.7.37 テキスト (text)
テキスト。ISLISPテキストは,最上位形式の並びによって構成する。
1.7.38 最上位形式 (toplevel form)他の評価形式の中に入れ子になっていない評価形式又はprogn形式
の中にだけ入れ子になっている評価形式。
1.7.39 最上位有効範囲 (toplevel scope) 完全なISLISPテキストの単位が処理される有効範囲。
1.7.40 書込み関数 (writer) クラスのインスタンスのスロットに値を束縛する役割を担う包括関数。

1.8 エラー

 エラー (error) とは,実行中に起きる状況であり,この規格が定義する意味に従ってプロセ
ッサが正しい実行を続けることが不可能な状況とする。このようなエラーを検出して報告する行動を,エ
ラーを通知する (signal) と呼ぶ。
違反 (violation) とは,実行準備の際に起こる状況であり,この規格が規定するテキスト上の要求が満た
されなかった状況とする。違反は,実行準備の際に検出される。

1.8.1 エラー指定

 この規格におけるエラー指定の用語を次に示す。

――――― [JIS X 3012 pdf 12] ―――――

8
X 3012 : 1998 (ISO/IEC 13816 : 1997)
a) エラーが発生する 処理系は,この種のエラーを,そのエラーを含む評価形式の実行完了以前,でき
る限り早期(例えば,そのコードが実行のために準備されるとき)に検出しなければならない。
処理系は,現在の評価形式の評価を停止しなければならない。実行中の処理全体を終了するのか,
デバッガに入るのか,又は制御をその処理の他の場所に移行するのかは,処理系定義とする。ただし,
利用者がハンドラを設定している場合は,この限りではない。
b) 結果は未定義とする これは,結果が予測不能であることを意味する。結果は,無害なものから,致
命的なものまでさまざまである。適合するISLISPテキストは,その結果及び影響に依存してはならな
い。適合するISLISPテキストは,その結果を予測不能として取り扱わなければならない。この規格で
結果を明示していない要求事項又は禁止事項に反した場合,結果は未定義とする。処理系は,この場
合にエラーを通知してもよい。
索引及び相互参照を簡単にするために,この規格におけるエラーには,エラー名を付け,“(エラー
名sample)”と表記する。これらのエラー名は,ISLISPテキスト及びISLISPプロセッサに対して,意
味論的な重要性をもたない。処理系がエラーを表現するためのオブジェクトのクラス,及び表示する
エラーメッセージの文章は処理系依存とする。

1.8.2 広範囲に使われるエラー

 大多数のエラーについては,それらが現れる文脈で詳細に規定する。幾
つかのエラーは,広範囲に使われるものであり,ここで規定する。
a) 定義域エラー クラスの制約を有する標準関数の引数として与えられたオブジェクトが,関数が要求
するクラスのインスタンスでない場合は,エラーが発生する(エラー名domain-error)。
b) パラメタ数エラー 関数が要求するパラメタの個数と異なる個数の引数を伴って,その関数が起動さ
れた場合は,エラーが発生する(エラー名arity-error)。
c) 未定義エラー 識別子によって指し示される実体が,その実体を参照するときに未定義である場合は,
エラーが発生する(エラー名undefined-entity)。この種類のエラーで頻度の高いものに,
undefined-function及びunbound-variableがある。
これらが,すべての種類のエラーではない。より完全な一覧を,21.4に示す。

1.9 ISLISPプロセッサ及びISLISPテキストの適合性

 この規格の要求に適合するISLISPプロセッサは,
次の項目を満たさなければならない。
a) この規格が規定するすべての機能を受け入れ,実装する。
b) 違反(1.8参照)であるとこの規格が明記する事項を含むテキストを拒絶する。
c) この規格で処理系定義と規定した機能をすべて定義する文書を備えている。
d) プロセッサが受け入れる機能で,この規格が規定していないものを定めた文書を備えている。これら
の拡張は,“JIS X 3012 : 1998が規定するISLISPの拡張である”と明記しなければならない。
適合するISLISPテキストは,処理系依存機能に依存してはならない。しかし,適合するISLISPテキス
トは,この規格が要求する処理系定義機能に依存してもよい。
適合するISLISPテキストは,この規格が定義する名前付き定数に対する局所的な変数束縛を行ってはな
らない。そのような試みが行われた場合は,違反とする。

2. クラス

 ISLISPにおいて,データ型は,クラスシステムとして実現する。クラス (class) は,それ自
身一つのオブジェクトであり,他のオブジェクトの集合の構造及び振る舞いを決定する。この集合の個々
のオブジェクトを,インスタンス (instance) と呼ぶ。どのISLISPオブジェクトも,あるクラスのインスタ
ンスとする。振る舞いとは,インスタンスに対して行い得る操作の集合とする。

――――― [JIS X 3012 pdf 13] ―――――

                                                                                              9
X 3012 : 1998 (ISO/IEC 13816 : 1997)
クラスは,他のクラスから構造及び振る舞いを継承できる。他のクラスからの継承を目的に,クラス定
義の中でそれらのクラスを参照するクラスを,それらのクラスの下位クラス (subclass) と呼ぶ。継承の目
的で指定したクラスを,継承しているクラスの上位クラス (superclass) と呼ぶ。
一つのクラスは一つの識別子を名前としてもつ。この識別子は,例えば,メソッドの定義において,パ
ラメタ特殊化指定として使うことができる。ある名前に対応するクラスオブジェクトを参照するには,特
殊形式のclassを使用する。
C2というクラスの定義の中で,明示的にC1を上位クラスとして指定している場合,又はこの規格の中
で指定している場合(例えば,図1において,C2がC1から矢印で結ばれている場合),クラスC1は,クラ
スC2の直接の上位クラス (direct superclass) という。このとき,C2はC1の直接の下位クラス (direct subclass)
という。クラスの並びC1, ..., Cnが存在し,1ラスである場合,クラスC1をCnの上位クラス (superclass) という。この場合,CnはC1の下位クラス
(subclass) という。どのクラスも,自分自身の上位クラスではなく,自分自身の下位クラスでもない。すな
わち,C1がC2の上位クラスの場合,C1とC2とは同じクラスではない。あるクラスC及びCのすべての上
位クラスからなる集合を,“C及びその上位クラス”という。
利用者定義のクラスCが二つのクラスC1及びC2を継承している場合,C1及びC2に共通の上位クラス
は,<standard-object>及び<object>に限る。これによって,制限された多重継承が許される。
どのISLISPオブジェクトも,唯一のクラスの直接インスタンスとする。その唯一のクラスを,“そのオ
ブジェクトのクラス”と呼ぶ。
クラスのインスタンスとは,そのクラスの直接インスタンスであるか,又はそのクラスの下位クラスの
インスタンスとする。
クラスは,上位下位の関係によって循環のない有向グラフ (directed acyclic graph) を構成する。このグラ
フの節はクラスを表し,C2がC1の直接の下位クラスであるときにだけ,C1からC2に有向辺が存在する。
このグラフを継承グラフ (inheritance graph) と呼ぶ。継承グラフは<object>というクラスを根とし,これは,
上位クラスをもたない唯一のクラスとする。それゆえ,<object>は,自分以外のすべてのクラスの上位ク
ラスとなる。<standard-object>という名前のクラスは,<standard-class>というクラスのインスタンスとする。
<standard-object>は,<standard-class>のインスタンスであるすべてのクラス(ただし,<standard-object>
自身は除く。)の上位クラスとする。
それぞれのクラスには,クラス優先度リスト (class precedence list) がある。これは,与えられたクラス
及びそのすべての上位クラスの間の全順序関係を表す。この全順序関係は,最も優先度の高いクラスから,
最も優先度の低いクラスへの順にクラスを並べたものとする。クラス優先度リストは,幾つかの方法で利
用する。一般に,クラスはその上位クラスの特性を継承するが,より優先度の高いクラスは,それらの特
性を遮へいする (shadow),すなわち上書きすることができる。また,メソッドを選択したり結合する処理
においては,メソッド間の優先順序を決定するために,クラス優先度リストが利用される。

2.1 メタクラス

 クラスは,それ自身があるクラスのインスタンスであるオブジェクトとして表現され
る。あるオブジェクトのクラスのクラスを,そのオブジェクトのメタクラス (metaclass) と呼ぶ。メタク
ラスという用語は,クラスをインスタンスとしてもつクラスを指すために使用する。
メタクラスは,そのインスタンスであるクラスに関する継承の方法を決定し,そのクラスのインスタン
スの表現を決定する。
ISLISPのオブジェクトシステムでは,次のものを定義済みのメタクラスとする。
・ <standard-class>は,特に指定のないとき,defclassで定義されるクラスのクラスとする。

――――― [JIS X 3012 pdf 14] ―――――

10
X 3012 : 1998 (ISO/IEC 13816 : 1997)
・ <built-in-class>は,特別な実装をもつか,又は機能に制限をもつクラスをインスタンスとするクラスと
する。例えば,<built-in-class>のインスタンスであるクラスに対しては,下位クラスを定義してはなら
ない。

2.2 定義済みクラス

 次のクラスは,クラスシステムにおける基本クラス(すなわち,メタクラス以外
の定義済みのクラス)とする。
<arithmetic-error> <floating-point-underflow> <simple-error>
<basic-array> <function> <standard-generic-function>
<basic-array*> <general-array*> <standard-object>
<basic-vector> <general-vector> <storage-exhausted>
<character> <generic-function> <stream>
<cons> <integer> <stream-error>
<control-error> <list> <string>
<division-by-zero> <null> <symbol>
<domain-error> <number> <unbound-variable>
<end-of-stream> <object> <undefined-entity>
<error> <parse-error> <undefined-function>
<float> <program-error>
<floating-point-overflow> <serious-condition>
<standard-class>及び<built-in-class>は,定義済みのメタクラスとする。
利用者がdefclassで定義したクラスは,<standard-class>のインスタンスとなる。定義済みのクラスは,
あたかもdefclassで定義されたかのように<standard-class>のインスタンスとして実装するか又は
<built-in-class>のインスタンスとして実装するかのいずれかとする。
図1に,ISLISPで定義されるクラス間に定められた継承関係を示す。図の中で,クラスC1からクラス
C2が矢印で直接結ばれている場合,C1はC2の直接の上位クラスとし,C2はC1の直接の下位クラスとする。
これ以外の関係が追加されてもよいが,次の制約に従うこととする。
a) <standard-generic-function>が<standard-object>の下位クラスであるかどうかは,処理系定義とする。
b) 上の<standard-generic-function>に関する制約及び図1で規定することを除いては,この規格で定義され
るクラス間には,上位下位の関係は存在しない。しかし,処理系が定める追加のクラスと,この規格
で定義するクラスとの間には,処理系が定める上位下位の関係が存在してよい。
c) <null>のクラス優先度リストには,<null>,<symbol>,<list>及び<object>が,この順序で現れる。
d) 利用者は,defclassを用いて,追加のクラスを定義できる。
組込みクラス (built-in class) とは,そのインスタンスの機能が制限されているか又は特別な表現をもつ
クラスとする。defclass定義形式を,組込みクラスの下位クラスを定義するために使用してはならない。包
括関数createが組込みクラスのインスタンスを生成するために使われた場合は,エラーが発生する。
標準クラス (standard class) は,<standard-class>のインスタンスとする。組込みクラスは,<built-in-class>
のインスタンスとする。
直接の上位クラスを指定しないで定義した標準クラスは,<standard-object>及び<object>という名前のク
ラスを除けば,図1に現れるどのクラスとも重複しないことが保証される。
<function>は,すべての関数のクラスとする。<standard-generic-function>は,クラス指定(7.2.1参照)な
しに定義されたすべての包括関数のクラスとする。

――――― [JIS X 3012 pdf 15] ―――――

次のページ PDF 16

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

  • ISO/IEC 13816:1997(IDT)

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