JIS X 3008:1994 プログラム言語Pascal | ページ 4

12
X 3008-1994 (ISO/IEC 7185: 1990)
参考1. 次の二つの例は,それぞれ同じ配列型の異なる表現法を示す。
例2. array [Boolean] of array [1..10] of array [size] of real
array [Boolean] of array [1..10, size] of real
array [Boolean, 1..10, size] of real
array [Boolean, 1..10] of array [size] of real
例3. packed array [1..10, 1..8] of Boolean
packed array [1..10] of packed array [1..8] of Boolean
添字型の値をi,配列型の構造によってiに対応する配列型の成分の値をVi,添字型の最小値をm,最
大値をnとし,更に添字型の値の個数 (ord(n) -ord (m) +1)をkとするとき,配列型の値は,次の形のk個の
値の組とする。
(Vm, ...,Vn)
参考2. したがって,すべての成分の値が定義されない限り,配列型の値は存在しない。成分型がc
個の値をもつならば,配列型の値の集合の濃度は,cのk乗となる。
最小値が1で最大値が1より大きい部分範囲型を添字型が表し,成分型が文字型を表す詰めありの配列
型の表す型を,文字列型という。
.
文字列と文字列型の値との対応は,文字列の文字列要素を文面上の順にとったものと,文字列型の値の
成分を添字の上昇順にとったものを結び付けることによる。
参考3. 文字列型は,その値をテキストファイルへ書き出すことができ(6.9.3.6参照),関係演算子を
使用できる(6.7.2.5参照)という点で,普通の配列型と違う。

6.4.3.3 レコード型

 レコード型の構造及び値は,そのレコード型の.フィールド並びの構造及び値とする。
レコード型 = record フィールド並び end .
フィールド並び = [ ( 固定部 [ ; 可変部 ] | 可変部 ) ; ] ] .
固定部 = レコード要素 [{ ; レコード要素}] .
レコード要素 = 識別子並び : 型表記 .
フィールド名 = 識別子 .
可変部 = case 可変要素選択子 of 可変要素 [{ ; 可変要素}] .
可変要素選択子 = [ タグフィールド : ] タグ型 .
タグフィールド = 識別子 .
可変要素 = 選択定数並び : ( フィールド並び ) .
タグ型 = 順序型名 .
選択定数並び = 選択定数 [{ , 選択定数}] .
選択定数 = 定数 .
..
固定部も可変部も含まないフィールド並びは,成分をもたず,値として空値ただ1種類をもつ。このフ
ィールド並びを空であるという。
. . ...
フィールド並びの固定部のレコード要素の識別子並びの中の識別子の出現は,その識別子のフィールド
.....
名としての定義位置となる。この定義位置の領域は,そのフィールド並びを直接に含むレコード型とする。
このとき,そのフィールド名は,レコード型の個々の成分(それは,同時にそのフィールド並びの成分で
.
もある。)と結合する。この成分をフィールドという。その成分は,レコード要素の型表記が表す型をもつ。
.....
可変部を直接に含むフィールド並びは,この可変部に対応する一つの成分をもつ。この成分の値及び構
造は,その可変部によって定まる。

――――― [JIS X 3008 pdf 16] ―――――

                                                                                             13
X 3008-1994 (ISO/IEC 7185: 1990)
m個の成分をもつ空でないフィールド並びの値は,次の形のm個の値の組とする。
(V1,V2,...,Vm)
ここで,Viはそのフィールド並びのi番目の成分の値とする。
参考1. i番目の成分の型がFi個の値をもつならば,フィールド並びの値の集合の濃度は, (F1×F2
×...×Fm) となる。
. .
タグ型は,タグ型の順序型名が表す型とする。選択定数は,選択定数の定数が表す値を表す。
. . ... . .
可変部の可変要素の選択定数並びの中の各選択定数の型は,その可変部の可変要素選択子のタグ型の表
..... .....
す型と適合しなければならない。タグ型を直接に含む可変部に直接に含まれる選択定数が表す値は,すべ
て異なっていなければならない。更に,その値全体から成る集合は,そのタグ型の値の集合と等しくなけ
. .
ればならない。可変要素の選択定数並びの各選択定数が表す値は,その可変要素に対応しているという。
.
各可変部は,選択子型と呼ぶ型をもち,それと結合する。可変部の可変要素選択子がタグフィールドを
.. . . ..
含むとき,又は可変部の各可変要素の選択定数並びがただ一つの選択定数を含むとき,選択子型は,タグ
. . .
型の表す型とする。これらの場合,可変部の各可変要素は,その可変要素の選択定数並びの選択定数が表
す選択子型の値と結合する。それ以外の場合,可変部の選択子型は,新しい順序型とする。この型は,可
.
変部の各可変要素に対して値をちょうど一つずつもち,しかもそれ以外の値をもたない。各可変要素には,
その型の値が一つずつ結合する。
.
各可変部は,選択子と呼ぶ成分をもつ。この成分の型は,その可変部の選択子型とする。可変部の可変
.. ...
要素選択子がタグフィールドを含むとき,タグフィールドの中の識別子の出現は,その識別子のフィール
.....
ド名としての定義位置となる。この定義位置の領域は,その可変部を直接に含むレコード型とする。この
とき,そのフィールド名は,その可変部の選択子と結合する。選択子は,フィールド名と結合するとき,
かつそのときに限り,そのレコード型のフィールドという。
. .
可変部の各可変要素は,可変部の個々の成分を表す。その成分は,その可変要素のフィールド並びの値
及び構造をもつ。その成分は,同時に可変部の選択子型の,その可変要素に結合した値と結合する。可変
.
部の可変要素及び成分は,それらに結合した値をその可変部の選択子がもっときに限り,有効であるとい
う。
可変部の値は,次の形の対とする。
( Xk)
ここで,kは可変部の選択子の値とし,Xkは可変部の有効な可変要素のフィールド並びの値とする。
参考2. 選択子型の値がn個あり,i番目の値に結合した可変要素の.フィールド並びがTi個の値をも
つならば,可変部の値の集合の濃度は, (T1+T2+...+Tn) となる。可変部の値には,有効でな
い可変要素に対応する成分はない。
3. レコード変数の可変部に含まれるフィールドの使い方に,6.5.3.3, 6.6.3.3及び6.6.5.3に示す制
限を置く。
例 record
year : 0..2000 ;
month : 1..12 ;
day : 1..31
end
record

――――― [JIS X 3008 pdf 17] ―――――

14
X 3008-1994 (ISO/IEC 7185: 1990)
name, firstname : string ;
age : 0..99 ;
case married : Boolean of
true : (Spousesname : string) ;
false : ( )
end
record
x, y : real ;
area : real ;
case shape of
triangle :
(side : real; inclination, angle1, angle2 : angle) ;
rectangle:
(side1, side2 : real; skew : angle) ;
circle :
(diameter : real) ;
end
.

6.4.3.4 集合型

 集合型の値全体は,集合型の基底型のべき集合としての構造をもつ。すなわち,集合型
のそれぞれの値は,基底型の値をげん
元とする集合とする。
集合型 = set of 基底型 .
基底型 = 順序型 .
参考1. 集合型の値に適用できる演算子は,6.7.2.4に規定する。
例 set of char
set of (club, diamond, heart, spade)
参考2. 集合型の.基底型がb個の値をもつならば,その集合型の値の集合の濃度は,2のb乗となる。
部分範囲型でない各順序型Tに対して,詰めなし正規T集合型と呼ぶ詰めなしの集合型及び詰めあり正
規T集合型と呼ぶ詰めありの集合型を設ける。SがTを親の型とする部分範囲型であれば,set of S型で定
まる値の集合は,詰めなし正規T集合型及び詰めあり正規T集合型で定まる値の集合(6.7.1参照)の部分
集合とする。

6.4.3.5 ファイル型

        ファイル型 = file of 成分型 .
参考1. ファイル型は,指定された成分型の値の列を,列中の現在位置及び検査中か生成中かを示す
モードとともに表現する。
.
次の型を表す型表記は,ファイル型の成分型としてはならない。
・ ファイル型
・ 成分の型表記の中に,ファイル型の成分型としてはならないものを含む構造型
例 file of real
file of vector
ファイル型は,列型と呼ぶ型を暗黙に定める。この型は,次の(a)(e)の条件を満たす列と呼ぶ値だけを

――――― [JIS X 3008 pdf 18] ―――――

                                                                                             15
X 3008-1994 (ISO/IEC 7185: 1990)
もつ。
参考2. 記法xyは,列xと列yの連結を表す。列の記法(例えば,S(c)),列の連結及び選択子の
記法 (,first, last, rest) 並びに列に関する等号 (=) は,Pascal言語の範囲外とする。これら
の記法は,ここでファイルの値を定義するのと,6.6.5.2及び6.6.6.5で標準のファイル操作を規
定するのに用いる。
(a) ()は,列型Sの値とする。これを空列という。空列は,成分をもたない。
(b) を指定された成分型の値とし,xを列型Sの値とする。このとき,S(c)は,成分値cだけから成る型
Sの列とする。S(c) x及びxS(c)は,S()とは異なる型Sの列とする。
(c) , S及びxを(b)と同じとする。yは列S(c) xを表し,zは列xS(c)を表すとする。このとき,記法
y. firstはc(すなわちyの先頭の成分値)を表し,y. restはx(すなわちyから先頭の成分を除いて得
られる列)を表し,z. lastはc(すなわちzの最後の成分値)を表す。
(d) 及びyをそれぞれ型Sの列とする。xもyも空列でない場合,x=yは, (x. first=y. first) 及び (x. rest=y.
rest) の両方が真のとき,かつそのときに限り,真とする。x又はyが空列の場合,x=yは,xとyの
両方が空列のとき,かつそのときに限り,真とする。
(e) , y及びzを型Sの列とする。このとき,x (yz) = (xy) , S()x=x及びxS()=xは,
真とする。
また,ファイル型は,モード型と呼ぶ型も暗黙に定める。モード型は,Inspection(検査)及びGeneration
(生成)と呼ぶ二つの値だけをもつ。
参考3. Inspection及びGenerationという値の表し方は,Pascal言語の範囲外とする。
ファイル型は,三つの成分から成る構造をもつ。f. L及びf. Rと呼ぶ二つの成分の型は,暗黙の列型と
する。f. Mと呼ぶ第3の成分の型は,暗黙のモード型とする。
ファイル型のそれぞれの値は,次の形の3個の値の組とする。
(f. L, f. R, f. M)
ここで,f. L及びf. Rは列型の値とし,f. Mはモード型の値とする。ただし,f. MがGenerationのとき,
f. Rは空列に限る。ファイル型の値fは,f. Lf. Rが空列のとき,かつそのときに限り,空であるという。
参考4. ファイル型の値の二つの成分f. L及びf. Rは,一つの列f. Lf. R及びその列の中の現在位置
を表すと考えてよい。f. Rが空列でないとき,f. R. firstは,現在位置にある成分(現在成分)
と考えてよい。f. Rが空列のとき,現在位置はファイルの終わりにある。
標準の構造型名textは,ファイル型を表す。textが表す型に対しては,通常の列型及びモード型のほか
に,行と呼ぶ値をもつ列型を定める。行は,列csS (end-of-line) とする。ここで,csは文字型をもつ成
分の列とし,end-of-lineは特別な成分値とする。この値end-of-lineを行末成分と呼ぶ。列の成分以外の変
数に値end-of-lineを与えたときに成立すると6.で規定する表明は,文字型の値空白をその変数に与えたと
きの表明と同じとする。lを行とするとき,l. last以外のlの成分は,行末成分でない。文字型の値の集合
の処理系定義の部分集合を設け,これをテキストファイル禁止文字と呼ぶ。この部分集合に含まれる文字
をt. L又はt. Rの成分に与えたときの効果は,処理系依存とする。
行の列lsは,空列であるか,又は列lls'であるかのいずれかとする。ここで,lは行,ls'は行の列とす
る。
textが表す型の値tは,次の(a)(b)の条件を満たす。
(a) . M=Inspectionであれば,t. Lt. Rは行の列である。
(b) . M=Generationであれば,t. Lt. Rはlscsである。ここで,lsは行の列,csは文字型をもつ成分の

――――― [JIS X 3008 pdf 19] ―――――

16
X 3008-1994 (ISO/IEC 7185: 1990)
列とする。
参考5. (b)で,csは,生成されつつある部分行であると考えてもよい(特に,csが空列でないとき)。
部分行は,ファイルの検査の際には生じない。t. M=Generationのとき,t. Rは空列なので,
csがt.Rに対応しているわけではない。
標準の型名textが表す型をもつ変数を,テキストファイルという。
参考6. file of char型の変数に適用できるすべての標準手続き及び標準関数は,テキストファイルに
も適用できる。テキストファイルだけに適用できる標準手続き及び標準関数は,6.6.6.5及び
6.9に規定する。
ポインタ型 ポインタ型の値は,nil値又は指示値とする。各指示値は,書下しポインタ型の.被指
6.4.4
示型の表す型をもつ変数を指示する。プログラムの実行中に,変数及びその変数を指示する値の作成及び
消去が許容されていなければならないという意味で,指示値の集合は,動的であるという。指示値及びそ
れが指示する変数は,標準手続きnew(6.6.5.3参照)だけによって作成できる。
参考1. nil値は,指示値ではないので,変数を指示しない。
予約語nilは,すべてのポインタ型のnil値を表す。
ポインタ型 = 書下しポインタ型 | ポインタ型名 .
書下しポインタ型 = ↑ 被指示型 .
被指示型 = 型名 .
参考2. 予約語nilは,特定の型をもたない。代入可能性の規則又は演算子に関する適合性の規則を
満たす適当なポインタ型(もしあれば)をもつとみなす。

6.4.5 型の適合性

 次の(a)(d)の条件のうちのいずれかが成立するときに,型T1とT2は,適合すると
いう。
(a) 1とT2が同じ型である。
(b) 1がT2の部分範囲であるか,T2がT1の部分範囲であるか,又はT1とT2の両方が同じ親の型の部
分範囲である。
(c) 1とT2が基底型の適合する集合型であって,両方とも詰めありか,又は両方とも詰めなしである。
(d) 1とT2が同じ個数の成分をもつ文字列型である。

6.4.6 代入可能性

 次の(a)(e)の条件のうちのいずれかが成立するときに,型T2の値は,型T1に対し
て代入可能であるという。
(a) 1とT2が同じ型で,その型をファイル型の.成分型とすることができる(6.4.3.5参照)。
(b) 1が実数型で,T2が整数型である。
(c) 1とT2が適合する順序型で,型T2の値が,型T1の定める閉区間内にある。
(d) 1とT2が適合する集合型で,型T2の値のすべての元が,型T1の基底型の定める閉区間内にある。
(e) 1とT2が適合する文字列型である。
代入可能性の規則を適用する箇所では,次の(a)(b)の規定を適用する。
(a) 1とT2が適合する順序型で,型T2の値が型T1の定める閉区間内になければ,誤りとする。
(b) 1とT2が適合する集合型で,型T2の値のいずれかの元が型T1の基底型の定める閉区間内になけれ
ば,誤りとする。
代入可能性の規則によって整数型の値が実数型に代入可能とならなければならない箇所では,整数から
実数への暗黙の型変換を行う。

6.4.7 型定義部の例

――――― [JIS X 3008 pdf 20] ―――――

次のページ PDF 21

JIS X 3008:1994の引用国際規格 ISO 一覧

  • ISO/IEC 7185:1990(IDT)

JIS X 3008:1994の国際規格 ICS 分類一覧