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

                                       日本工業規格(日本産業規格)                             JIS
X 3012 : 1998
(ISO/IEC 13816 : 1997)

プログラム言語ISLISPInformation technology−Programming languages, theirenvironments and system software interfaces−Programming language ISLISP

序文

 この規格は,1997年に第1版として発行されたISO/IEC 13816, Information technology−Programming
languages, their environments and system software interfaces−Programming language ISLISPを翻訳し,技術的内
容を変更することなく作成した日本工業規格(日本産業規格)である。
なお,この規格で側線を施してある“参考”は,原国際規格にはない事項である。

1. 適用範囲,表記法及び適合性

1.1 適用範囲

a) 適用事項 この規格は,ISLISPプロセッサ及びISLISPテキストに対する適合性要件を規定し,プロ
グラム言語ISLISPの構文及び意味を規定する。
b) 適用外事項 この規格は,次の事項を規定しない。
1) 特定のデータ処理システムの能力又はプロセッサの能力を超えるISLISPテキストの大きさ又は複
雑さ,及び能力を超えた場合にとる動作。
2) SLISPプロセッサを実装できるデータ処理システムの最小要件。
3) SLISPテキストを実行準備する方法,及び実行のために準備されたISLISPテキストを起動する方
法。
4) 人が読むために刊行されるISLISPテキストの印刷上の表示。
5) 処理系が提供するかもしれない又は提供しないかもしれない拡張機能。
備考 この規格の対応国際規格を,次に示す。
ISO/IEC 13816 : 1997, Information technology−Programming languages, their environments and
system software interfaces−Programming language ISLISP

1.2 引用規格

 次に掲げる規格は,この規格に引用されることによって,この規格の一部を構成する。
この規格の制定時点では,次の規格が最新規格であるが,改正されることもあるので,この規格を使う当
事者は,最新版を適用できるかどうかを検討するのが望ましい。
・ISO/IEC TR 10034 : 1990, Guidelines for the preparation of conformity clauses in programming
language standards
・IEEE standard 754-1985, Standard for binary floating-point arithmetic

1.3 表記法

 構文の概念及び意味の概念を明確に定義し,かつ,これらの概念を区別するために,この
規格では複数の記述抽象化のレベルを用いる。

――――― [JIS X 3012 pdf 6] ―――――

2
X 3012 : 1998 (ISO/IEC 13816 : 1997)
ISLISPテキストの構成単位から,ISLISPデータ構造の表現への対応が存在する。この規格では,テキス
トと,それに対応するISLISPオブジェクト(データ構造)とを,同時に取り扱う。ISLISPのテキストは,
ISLISPのデータ構造の外部仕様とみなすことができる。これらの二つの表現を区別するために,異なる概
念を使用する。テキスト表現の場合は,テキストの構成要素(識別子,リテラル,複合形式など)を使用
する。一方,ISLISPのオブジェクトの場合は,オブジェクト(記号,リストなど)を使用する。
ISLISPテキストの構成要素を評価形式 (evaluation form) 又は単に形式 (form) と呼ぶ。評価形式は,識
別子,リテラル又は複合形式とする。複合形式は,関数適用形式,マクロ形式,特殊形式又は定義形式と
する。
識別子は,記号によって表現する。複合形式は,空でないリストによって表現する。リテラルは,記号
及びリストのいずれでも表現できない。したがって,リテラルは,識別子及び複合形式のいずれでもない。
例えば,数値はリテラルである。
オブジェクトは,実行のために準備される (prepared for execution)。これは,プログラム変換又はコンパ
イルを意味し,マクロ展開を含む。この規格は,検出しなければならない違反を定義するが,実行準備の
方法及びその結果は定義しない。実行準備が成功した場合は,その結果は,実行 (execution) 可能な状態
となる。実行準備及びそれに続く評価がISLISPの評価モデル (evaluation model) を実装する。ここで,“評
価”という用語を用いる理由は,ISLISPが式言語であるためである。すなわち,各評価形式は値をもち,
その評価形式を含む評価形式の値を計算するために使われる。この規格では,ある実体が実行のために準
備された結果を,“実行準備された実体”と表すことがある。例えば,“実行準備された評価形式”,“実行
準備された特殊形式”などと表す。
例 “cond特殊形式”は,実行のために準備されて“実行準備されたcond”となる。
実行例におけるメタ記号“⇒”は,実際の評価の結果を示す。例えば,
(+ 3 4) ⇒7
メタ記号“→”は,与えられたパターンをもつ評価形式を評価した際の,結果のクラスを示す。例えば,
(+ i1 i2) →<integer>
評価形式のパターン(通常は,関数名又は特殊演算子である定数部分によって定義される。)に対しては,
そのパターンに一致するすべての評価形式を評価した結果が属するクラスを“→”で示す。
同値な評価形式のパターン又は評価形式を,“≡”によって関係付ける。
評価形式のパターンに関しては,次の表記法を使用する。
(f-name argument*) →結果のクラス f kind
この表記法では,イタリック体の単語は,非終端記号(パターン変数)を表す。f-nameは,常に終端記
号であり,特定の関数名,特殊演算子,定義演算子又は包括関数名のいずれかとする。
この表記法で下線を付けた用語(例えば,定義形式におけるname)は,評価されない式であることを意
味する。評価形式が評価される場合とされない場合があるとき(例えば,ifにおけるthen-form及びeles-
form)は,そのことを規定に明記する。
クラス名は,一律に<class-name>と表記する。例えば,<list>は,通常“リストクラス”と呼ばれるクラ
スの名前である。
パターン変数に関しては,次の表記法を用いる。
term+ termが一つ以上現れることを意味する。
term* termが0個以上現れることを意味する。

――――― [JIS X 3012 pdf 7] ―――――

                                                                                              3
X 3012 : 1998 (ISO/IEC 13816 : 1997)
[term] termが高々一つしか現れないことを意味する。すなわち,termが省略可能で
あることを意味する。
[{term1 term2...}] 各termをまとめることを意味する。
term1|term2|... いずれかのtermが一つだけ現れることを意味する。
評価形式の引数がクラスの制約をもつ場合は,その評価形式を規定するために次の名前を使用する。
<basic-array>
array, array1,...arrayj,...
<cons>
cons, cons1,...consj,...
<list>
list, list1,...listj,...
<object>
obj, obj1,...objj,...
<basic-vector>又は<list>(17.参照)
sequence, sequence1,...sequencej,...
<stream>
stream, stream1,...streamj,...
<string>
string, string1,...stringj,...
<character>
char, char1, charj,...
<function>
function, function1,...functionj,...
<class>
class, class1,...classj,...
<symbol>
symbol, symbol1,...symbolj,...
<number>
x, x1,...xj,...
<integer>
z, z1,...zj,...
この規格では,特にことわらない限り,次の方式を使用する。
-p 述語(“真偽値関数”と呼ばれることがある)の名前は,通常-pで終わる。通常,すべて
のクラス<name>は特性関数をもつ。特性関数の名前は,nameがハイフンを含む場合は
name-p(例えば,generic-function-p)とし,ハイフンを含まない場合はnamep(例えば,
symbolp)とする。ただし,名前が “p” で終わる関数のすべてが述語とは限らない。
create- 通常,組込みクラス<name>は生成関数をもち,その名前はcreate-nameとする。
def これは,定義演算子の接頭語として使用する。
set- この規格では,set-nameという名前の関数はすべて,場所に対する書込み関数であり,name
という名前の,対応する読出し関数が存在する。
この言語におけるどのような実体に対しても,名詞句 “entity-kind name” は,nameによって表される
entity-kindという種類の実体を意味する。例えば,名詞句“関数name”,“定数name”及び“クラスname”
は,nameによって表される関数,定数及びクラスをそれぞれ意味する。

1.4 字句要素

 ISLISPテキストは,字句要素によって構成する。字句要素は,次の文字によって構成す
る(12.参照)。
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h ij k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 + - < > / * & = . ? ! $ % : @ [ ] ^ [{}] #
これ以外の文字は,処理系定義とする。
次の文字は,それ自体で字句要素とする(8.及び13.1参照)。
( ) ,
次の文字の組は,それ自体で字句要素とする(4.7,8.及び14.1参照)。ここで,nは10進数の並びとす
る。

――――― [JIS X 3012 pdf 8] ―――――

4
X 3012 : 1998 (ISO/IEC 13816 : 1997)
# #( , @ #B #b #O #o #X #x #nA #na
記号(10.参照),数値(11.参照),文字(12.参照)及び文字列(16.参照)は,字句要素とする。
\(単一エスケープ)及び|(多重エスケープ)は,特殊文字とする。これらは,ある種の字句要素(識
別子,文字列リテラルなど)の中に現れてもよい。
これ以外の字句要素は,区切り記号によって分離する。区切り記号は,分離記号及び次の文字とする。
( ) ,
区切り記号が文字列(16.参照)の中,一対の多重エスケープ文字(10.参照)で囲まれた部分,又は#\
の直後の文字として現れた場合には,区切り記号としての効果は無効とする。
参考 JIS X 0201では,文字はオーバライン (7/14) に対応し,文字\は円記号 (5/12) に対応してい
る。

1.4.1 分離記号

 分離記号は,空白,コメント,復帰改行及び処理系定義の文字(例えば,タブ)とする。
分離記号は意味をもたず,別の分離記号で置き換えても,ISLISPテキストの意味を変えることはない。

1.4.2 注釈

 セミコロン (;) は,注釈開始 (comment begin) のための文字とする。すなわち,セミコロン
と,それに続く行末までの文字が注釈となる。
#|で始まり,|#で終わる文字の並びは注釈とする。これらの注釈を入れ子にしてもよい。
注釈は,分離記号であり,字句要素の中に現れることはできない。

1.5 テキスト表現

 オブジェクトのテキスト表現は,機械独立とする。ISLISPオブジェクトのテキスト
表現の幾つかを次に示す。これらの表現は,read関数によって読み込むことができる。字句要素について
は,1.4に示す。
a) 空リスト (null)オブジェクトnilは,クラス<null>に属する唯一のオブジェクトとする。入力の際に
は,nil又は()と表記する。nil又は()のいずれが出力されるかは,処理系定義とする。
リストは,通常,nilで終わり, (obj1 obj2...objn) と表記する。ドットリスト(すなわ
b) リスト (list)
ち,末尾がnilでないリスト)は, (obj1 obj2···objn.objn+1) と表記する。
c) 文字 (character) <character>クラスのインスタンスは,#\・と表記する。“・”は,この表記が表現す
る文字とする。この記法で表記されない特別な標準文字が二つある。これらは,復帰改行文字及び空
白文字であり,それぞれ#\newline及び#\spaceと表記する。
d) コンス (cons) コンスは, (car .cdr) と表記する。ここで,car及びcdrは,オブジェクトとする。
e) 整数 (integer) 整数(10進)は,10進数の並びで表現し,正符号 (+) 又は負符号 (-) で始めても
よい。2進数,8進数及び16進数は,テキスト表現をそれぞれ#b, #o及び#xで始める。
f) 浮動小数点数 (float) 浮動小数点数は,次のいずれかの形で表記する。
[s] dd...d.dd...d
[s] dd...d.dd...dE[s]dd...d
[s] dd...d.dd...de[s]dd...d
[s] dd...dE[s]dd...d
[s] dd...de[s]dd...d
ここで,sは “+” 又は “-” であり,dは “0” “9” のいずれかとする。例えば,987.12,+12.5E-13,
-1.5E12,1E32(1)。
注(1) この数値は自然数ではあるが,その表記のために,浮動小数点数とみなす。
g) ベクタ (vector)クラス <general-vector> に属するベクタは,#(obj1...objn) と表記する。
h) 配列 (array)クラス<general-array*>又はクラス<general-vector>に属する配列は,入力の際には#ra(r

――――― [JIS X 3012 pdf 9] ―――――

                                                                                              5
X 3012 : 1998 (ISO/IEC 13816 : 1997)
は配列の次元数を表す整数)に続けて,その配列の内容を表す並びを入れ子構造にして表記する。そ
の構造は,次のように定義する。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)))
出力(format参照)に際しては,クラス<general-vector>に属する配列は,#(...) の形で出力する。
i) 文字列 (string) 文字列は一対の”で囲まれた文字の並びによって表記する。例えば, “abc”。特殊
文字の前には,逆斜線をエスケープ文字として使用する。
j) 記号 (symbol) 名前付きの記号は,その印字名で表記する。印字名が特殊文字(10.参照)を含む場
合は,印字名を囲む縦線 (|) が必要となるときがある。名前なしの記号の表記は,処理系定義とする。
オブジェクトの中には,テキスト表現をもたないものがある。例えば,クラス及び<function>クラスのイ
ンスタンスは,テキスト表現をもたない。

1.6 予約語

 名前にコロン (:) 及び/又はアンパサンド (&) を含む記号は予約されており,識別子とし
て使用してはならない。名前がコロン (:) で始まる記号を,キーワード (keyword) と呼ぶ。

1.7 定義

 この規格では,次の定義を用いる。
1.7.1 抽象クラス (abstract class) 定義によって,直接インスタンスをもつことが許されないクラス。
1.7.2 活動 (activation)関数の計算。個々の活動は,起動時点,活動期間及び活動終了時点をもってい
る。活動は,関数適用形式によって起動される。
1.7.3 アクセス関数 (accessor) インスタンスのスロットに対する読出し関数と書込み関数との総称。
1.7.4 束縛 (binding) 束縛には,構文的側面と意味論的側面とがある。
構文的には,“束縛”は,識別子と,束縛するISLISP評価形式との関係を規定する。束縛されているか
どうかは,識別子が定義されている位置とそれが参照されている位置とを関係付けることによって,検査
できる。
意味論的には,“束縛”は,変数,変数名及びオブジェクトの間の関係(又は変数とその場所との関係)
を規定する。この関係は,束縛という実体によって具現化されていると考えることができる。そのような
束縛の実体は,実行時に構築され,後で破壊される。ただし,束縛によっては,無制限の存在期間をもつ
場合がある。
1.7.5 クラス (class) オブジェクトであって,インスタンスと呼ばれる一群のオブジェクトの構造及び
振る舞いを決定する。振る舞いとは,一つのインスタンスに対して実行できる操作の集合である。
1.7.6 例外状態 (condition) 実行中のプログラムによって検出される(又は検出される可能性のある)
状況を表現するオブジェクト。
1.7.7 定義位置 (definition point) ISLISPテキストのテキスト上の位置であり,その位置以降では,定
義されたオブジェクトは識別子によって表現される。
1.7.8 直接インスタンス (direct instance) ISLISPオブジェクトは,唯一のクラスの直接インスタンスで
ある。その唯一のクラスを,“そのオブジェクトのクラス”と呼ぶ。直接インスタンスは振る舞いをともな
い,直接インスタンスのすべての集合が,一つのクラスを構成する。
1.7.9 動的 (dynamic) プログラムの実行によって初めて決定でき,一般に,静的に決定することが不
可能な影響をもつ。

――――― [JIS X 3012 pdf 10] ―――――

次のページ PDF 11

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

  • ISO/IEC 13816:1997(IDT)

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