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

                                                                                             91
X 3012 : 1998 (ISO/IEC 13816 : 1997)
の場合,signal-conditionの呼出しは正常には戻らない。
continuableがnilでない場合,signal-conditionの呼出しから戻ることができる(continue-condition参照)。
この場合,continuableの値は,継続の結果を記述する文字列又は記号tとする。後者の場合,"Continue with
no special action." といった処理系定義の文字列が利用される。
例 (signal-condition (create (class <simple-error>)
format-string "A A problem occurred."
format-arguments (bad))
nil)

21.2.2 例外処理に関する操作

 (ignore-error form*) →<object>                                                    特殊演算子
特殊形式ignore-errorsは,form*の実行中にエラーが発生した場合,ignore-errorsが直ちにnilを返すよう
な,<error>クラスに対するハンドラを生成する。その後,form*を左から右に順に実行し,実行が正常に終
了した場合,最後のformが返す値(formがない場合は,nil)を返す。
(report-condition condition stream) →<condition> 包括関数
包括関数report-conditionは,conditionの自然言語による記述をstreamに出力する。この包括関数は,利
用者定義の例外状態クラスに対して特殊化してもよい。
(condition-continuable condition) →<object> 関数
関数condition-continuableは,conditionが継続可能でない場合はnilを返し,継続可能であれば,継続の
結果を記述する文字列を返す。
(continue-condition condition [value])制御の移行及びデータの転送 関数
関数continue-conditionは,conditionを通知したsignal-conditionの呼出しを探し,その呼出しがvalueを
値として正常に戻るための処理を行うことによって,そのsignal-conditionの呼出し以降の実行を継続する
(continue)。valueの省略時値は,nilとする。
conditionが継続可能でない場合は,結果は未定義とする。
(with-handler handler form*) →<object> 特殊演算子
特殊形式with-handlerは,まずhandlerを評価する。その値は,関数でなければならない。この関数をハ
ンドラ関数 (handler function) と呼ぶ。このハンドラ関数は活性ハンドラ(21.2参照)として設定され,そ
の後form*が左から右に順に評価される。すべてのformの評価が正常に終了した場合,最後のformの値を
返す。formがない場合は,nilを返す。

21.3 例外オブジェクトに付随するデータ

 ISLISPで定義される例外状態クラスの幾つかに対しては,例
外オブジェクトの生成時にそのオブジェクトに付随するデータを与え,後で取り出すことができる。その
ようなクラスに対する初期化引数及びアクセス関数を,ここで定義する。

21.3.1 算術エラー

     <arithmetic-error> operation operation
operands operands
ここで,operationは実行されていた関数であり,operandsは受け取った
引数のリストとする。
(arithmetic-error-operation arithmetic-error) →<function> 関数

――――― [JIS X 3012 pdf 96] ―――――

92
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(arithmetic-error-operands arithmetic-error) →<list> 関数
これらの関数は,arithmetic-error生成時に,データとして与えられたoperation及びoperandsをそれぞれ
返す。arithmetic-errorがクラス<arithmetic-error>の例外状態でない場合は,エラーが発生する(エラー名
domain-error)。

21.3.2 定義域エラー

         <domain-error> object object
expected-class expected-class
ここで,objectは実際に与えられたオブジェクトであり,expected-class
は期待されるクラスとする。
(domain-error-object domain-error) →<object> 関数
(domain-error-expected-class domain-error) →<class> 関数
これらの関数は,domain-error生成時に,データとして与えられたobject及びexpected-classをそれぞれ
返す。domain-errorがクラス<domain-error>の例外状態でない場合は,エラーが発生する(エラー名
domain-error)。

21.3.3 構文解析エラー

           <parse-error> string string
expected-class expected-class
ここで,stringは構文解析中の文字列であり,expected-classはstring中の
テキストが表現することを期待されるクラスとする。
(parse-error-string parse-error) →<string> 関数
(parse-error-expected-class parse-error) →<class> 関数
これらの関数は,parse-error生成時に,データとして与えられたstring及びexpected-classをそれぞれ返
す。parse-errorがクラス<parse-error>の例外状態でない場合は,エラーが発生する(エラー名domain-error)。

21.3.4 単純なエラー

         <simple-error> format-string format-string
format-arguments format-arguments
ここで,format-string及びformat-argumentsは,エラーメッセージを作成
するためにformatに渡される文字列及びオブジェクトのリストとする。
format-argumentsとして与えられたリスト中の各オブジェクトは,format
の呼出しに対する個別の引数となる。
(simple-error-format-string simple-error) →<string> 関数
(simple-error-format-arguments simple-error) →<list> 関数
これらの関数は,simple-error生成時に,データとして与えられたformat-string及びformat-argumentsを
それぞれ返す。simple-errorがクラス<simple-error>の例外状態でない場合は,エラーが発生する(エラー名
domain-error)。

21.3.5 ストリームエラー

――――― [JIS X 3012 pdf 97] ―――――

                                                                                             93
X 3012 : 1998 (ISO/IEC 13816 : 1997)
<stream-error> stream stream
ここで,streamは,エラーが生じたストリームとする。
(stream-error-stream stream-error) →<stream> 関数
関数stream-error-streamは,stream-error生成時に,データとして与えられたstreamを返す。stream-error
がクラス<stream-error>の例外状態でない場合は,エラーが発生する(エラー名domain-error)。

21.3.6 未定義実体のエラー

     <undefined-entity> name name
namespace namespace
ここで,nameは,未定義であった識別子を表す記号とする。namespace
は,記号variable,dynamic-variable,function又はclassのいずれかとする。
(undefined-entity-name undefined-entity) →<symbol> 関数
(undefined-entity-namespace undefined-entity) →<symbol> 関数
これらの関数は,undefined-entity生成時に,データとして与えられたname及びnamespaceを返す。
undefined-entityがクラス<undefined-entity>の例外状態でない場合は,エラーが発生する(エラー名
domain-error)。
undefined-entity-namespaceの結果は,記号variable,dynamic-variable,function又はclassのいずれかとす
る。

21.4 エラー名

 この規格で名前を付けたエラー及びその意味を次に示す。
arity-error 関数の定義で許容されるパラメタ数に適合しない個数の引数を使って関
数が起動される場合に,このエラーが発生する。このエラーは,クラス
<program-error>の例外状態として表される。
cannot-create-array このエラーは,割り当てることができない配列を割り当てる場合に,発
生する。このエラーは,クラス<storage-exhausted>の例外状態として表さ
れる。
cannot-create-cons このエラーは,割り当てることができないコンスを割り当てる場合に,
発生する。このエラーは,クラス<storage-exhausted>の例外状態として表
される。
cannot-create-list このエラーは,割り当てることができないリストを割り当てる場合に,
発生する。このエラーは,クラス<storage-exhausted>の例外状態として表
される。
cannot-create-sequence このエラーは,列を生成する関数(例えば,subseq)がその列を割り当
てられない場合に,発生する。このエラーは,クラス<storage-exhausted>
の例外状態として表される。
cannot-create-string このエラーは,割り当てることができない文字列を割り当てる場合に,
発生する。このエラーは,クラス<storage-exhausted>の例外状態として表
される。
cannot-create-vector このエラーは,割り当てることができないベクタを割り当てる場合に,

――――― [JIS X 3012 pdf 98] ―――――

94
X 3012 : 1998 (ISO/IEC 13816 : 1997)
発生する。このエラーは,クラス<storage-exhausted>の例外状態として表
される。
cannot-parse-number このエラーは,parse-number関数が受け取ったstirng引数が数値のテキス
ト表現でない場合に,発生する。このエラーは,クラス<parse-error>の例
外状態として表される。
control-error このエラーは,ブロックから2回以上出ようとした場合,又は捕そくタ
グに対するcatch形式がない場合に,発生する。このエラーは,クラス
<control-error>の例外状態として表される。
division-by-zero このエラーは,ゼロで割ろうとした場合に発生する。このエラーは,ク
ラス<division-by-zero>の例外状態として表される。
domain-error このエラーは,引数クラスの制約をもつ標準関数に,引数として与えら
れたオブジェクトが,要求されるクラスのインスタンスでない場合に,
発生する。このエラーは,クラス<domain-error>の例外状態として表され
る。
end-of-stream eos-error-p引数が真のときに,ストリームの終端で文字若しくはバイト
を読もうとした場合,又はreadやread-lineがオブジェクトを読もうとし
ており,かつそのオブジェクトの読込みが終わる前にストリームの終端
が現れた場合に,このエラーは,発生する。このエラーは,クラス
<end-of-stream>の例外状態として表される。
immutable-binding このエラーは,変更不可能な束縛を変更しようとする場合に,発生する。
このエラーは,クラス<program-error>の例外状態として表される。
improper-argument-list このエラーは,apply関数に与えられた最後の引数がnilで終わるリスト
でない場合に,発生する。このエラーは,クラス<program-error>の例外
状態として表される。
index-out-of-range このエラーは,(eltのような)列中の要素をアクセスする関数に与えら
れた添字が,列の範囲を超えた整数である場合に,発生する。このエラ
ーは,クラス<program-error>の例外状態として表される。
not-an-input-stream このエラーは,入力ストリームでないストリームから入力しようとした
場合に,発生する。このエラーは,クラス<domain-error>の例外状態とし
て表される。
not-an-output-stream このエラーは,出力ストリームでないストリームに出力しようとした場
合に,発生する。このエラーは,クラス<domain-error>の例外状態として
表される。
unbound-variable このエラーは,未束縛の変数をアクセスした場合に,発生する。このエ
ラーは,クラス<unbound-variable>の例外状態として表される。
undefined-entity このエラーは,識別子によって示される実体が存在しないときに,その
実体をアクセスした場合に,発生する。このエラーは,クラス
<undefined-entity>の例外状態として表される。
undefined-function このエラーは,関数がその起動時点で存在しない場合に,発生する。こ
のエラーは,クラス<undefined-function>の例外状態として表される。

――――― [JIS X 3012 pdf 99] ―――――

                                                                                             95
X 3012 : 1998 (ISO/IEC 13816 : 1997)
発生しうる幾つかのエラーは,この規格では名前を付けていない。また,処理系によって追加されるエ
ラーもある。上のエラーが,起こりうるエラーのすべてではない。

22. その他の機能

 (identity obj) →<object>                                                                関数
関数identityは,objとeqlであるオブジェクトを返す。objは,いかなるISLISPオブジェクトでもよい。
例 (identity (a b c)) ⇒ (a b c)
(get-universal-time) →<integer> 関数
関数get-universal-timeは,世界標準時の形で“現在の時刻”の近似値を返す。単位は秒とする。世界標
準時は,1900年1月1日の始まり(すなわち,午前0時)からの秒数(うるう秒は無視する。)を表す整
数とする。get-universal-timeが2回呼び出される場合,最初の値は2回目の値以下とする。
処理系は,返される時刻が正しいことを確認する方法を備える必要はない。しかし,返される時刻が正
しくないと処理系が判断できる(例えば,時計がまだ初期化されていないことを決定できる)場合は,エ
ラーが発生する。
例 (get-universal-time) ⇒ 2901312000
(get-internal-real-time) →<integer> 関数
(get-interna1-run-time) →<integer> 関数
関数get-internal-real-timeは,現在の時刻を表す整数を返す。この値は,ある基準時刻からの相対時間と
し,単位は内部時間単位(internal-time-units-per-second参照)とする。この関数を2回呼び出したときの値
の差は,2回の呼出しの間の実際の経過時間とする。
関数get-internal-run-timeは,現在の実行時間を表す整数を返す。単位は内部時間単位とする。この時間
の正確な意味は,処理系定義とする。この関数を2回呼び出したときの値の差は,その間にプログラム実
行のために費やされた時間とする。
(internal-time-units-per-second) →<integer> 関数
関数internal-time-units-per-secondは,処理系の内部時間単位の1秒当たりの個数を返す。

――――― [JIS X 3012 pdf 100] ―――――

次のページ PDF 101

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

  • ISO/IEC 13816:1997(IDT)

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