この規格ページの目次
22
X 3008-1994 (ISO/IEC 7185: 1990)
タが追加できるような状態に変える。これより簡単にするためには,ファイル
の初期状態について何らかの仮定をすることが必要である。}]
var
LocalCopy : FileOfInteger ;
procedure CopyFiles (var from, into : FileOfInteger) ;
begin
reset (from) ; rewrite (into) ;
while not eof (from) o begin
into↑: =from↑;
put (into) ; get (from)
end
end [{ CopyFiles}] ;
begin [{ PrepareForAppending}]
CopyFiles (f, LocalCopy) ;
CopyFiles (LocalCopy, f)
end [{ PrepareForAppending}] ;
6.6.2 関数宣言
関数宣言 = 関数頭部 ; 指令
| 関数標示 ; 関数ブロック
| 関数頭部 ; 関数ブロック .
関数頭部 = function 識別子 [ 仮引数並び ] : ] 結果型 .
関数標示 = function 関数名 .
関数名 = 識別子 .
結果型 = 単純型名 | ポインタ型名 .
関数ブロック = ブロック .
. ... .
関数宣言の関数頭部の中に仮引数並びがあれば,それに応じて,その関数頭部の識別子に結合した関数
.
ブロック(もしあれば)の仮引数が定まる。関数ブロックは,代入文の関数名がそのブロックと結合する
..
代入文を少なくとも一つ含まなければならない(6.8.2.2参照)。
. ...
関数宣言の関数頭部の中の識別子の出現は,結果型が表す結果の型に結合した関数名としての,その識
.....
別子の定義位置となる。この定義位置の領域は,その関数宣言を直接に含むブロックとする。
...
..指令forwardがある関数宣言の.関数頭部の中に
その中に ,関数名としての定義位置をもつ識別子には,
. ...
関数宣言の関数標示の中の関数名としての引用がちょうど1回だけなければならない。しかも,その関数
..... .....
頭部を直接に含む手続き関数宣言部が,その関数標示を直接に含まなければならない。
. . ... .
関数宣言の関数ブロック(もしあれば)は,その関数宣言の関数頭部の中の識別子又はその関数宣言の
... .
関数標示の中の関数名のいずれかと結合する。同時に,関数ブロックのブロックは,識別子又は関数名の
いずれかに結合した結果の型と結合する。
一つの関数名に結合する関数ブロックは,1個以下でなければならない。
例 手続き関数宣言部の例
function Sqrt (x : real) : real ;
[{ この関数は,Newton法によりx (x > 0) の平方根を計算する。}]
――――― [JIS X 3008 pdf 26] ―――――
23
X 3008-1994 (ISO/IEC 7185: 1990)
var
old, estimate : real ;
begin
estimate : = x ;
repeat
old : = estimate ;
estimate : = (old+ x / old) * 0.5 ;
until abs (estimate-old) < eps * estimate ;[{ epsは大域的な定数である。}]
Sqrt : = estimate
end [{ Sqrt}] ;
function max (a : vector) : real ;
[{ この関数は,aの成分の最大値を求める。}]
var
largestsofar : real ;
fence : indextype ;
begin
largestsofar : = a [1] ;
[{ largestsofar = max (a [1] ) が成立する。}]
for fence : = 2 to limit do begin
if largestsofar < a [fence] then largestsofar : = a [fence]
[{ largestsofar = max (a [1] , ... , a [fence] ) が再び成立する。}]
end ;
[{ したがって,largestsofar = max (a [1] , ... , a [limit] ) である。}]
max : = largestsofar
end [{ max}] ;
function GCD (m, n : natural) : natural ;
begin
if n = 0 then GCD : = m else GCD : = GCD (n, m mod n) ;
end ;
[{ 次の二つの関数は,括弧付きの式を解析し,それを内部表現に変える。これらの
関数は,互いに呼び合う(相互再帰的という。)ので,forwardを用いて宣言
されている。これらの関数で使う次の識別子は,ここでは定義していない。
formula, IsOpenParenthesis, IsOperator, MakeFormula, nextsym,
operation, ReadElement, ReadOperator 及び SkipSymbol。}]
function ReadExpression : formula ; forward ;
function ReadOperand : formula ; forward ;
function ReadExpression ; [{ forward宣言の頭部参照。}]
var
this : formula ;
op : operation ;
――――― [JIS X 3008 pdf 27] ―――――
24
X 3008-1994 (ISO/IEC 7185: 1990)
begin
this : = ReadOperand ;
while IsOperator (nextsym) o
begin
op : = ReadOperator ;
this : = MakeFormula (this, op, ReadOperand) ;
end ;
ReadExpression : = this
end;
function ReadOperand ; [{ forward宣言の頭部参照。}]
begin
if IsOpenParenthesis (nextsym) hen
begin
SkipSymbol ;
ReadOperand : = ReadExpression ;
[{ nextsymは閉じ括弧のはずである。}]
SkipSymbol
end
else ReadOperand : = ReadElement
end ;
6.6.3 引数
. ... .
6.6.3.1 引すう
値ひき
一般規則 値引数仕様の識別子並びの中の識別子をあたい 数という。変数引数仕様の識別子並び
...
の中の識別子を変数引数という。
仮引数並び = ( 仮引数区域 [{ ; 仮引数区域}] ) .
仮引数区域 > 値引数仕様 | 変数引数仕様 | 手続き引数仕様 | 関数引数仕様 .
値引数仕様 = 識別子並び : 型名 .
変数引数仕様 = var 識別子並び : 型名 .
手続き引数仕様 = 手続き頭部 .
関数引数仕様 = 関数頭部 .
参考1. 仮引数区域の構文規則は,6.6.3.7.1にもある。
. .
手続き頭部の仮引数並びを領域とする,引数名としての定義位置をもつ識別子を,その手続き頭部の識
. .
別子に結合した手続きブロック(もしあれば)のブロックの仮引数という。関数頭部の仮引数並びを領域
.
とする,引数名としての定義位置をもつ識別子を,その関数頭部の識別子に結合した関数ブロック(もし
.
あれば)のブロックの仮引数という。
. ...
値引数仕様又は変数引数仕様の識別子並びの中の識別子の出現は,その識別子の引数名としての定義位
.....
置及び結合した変数名としての定義位置となる。前者の領域は,それを直接に含む仮引数並びとし,後者
の領域は,それを仮引数とするブロック(もしあれば)とする。
. ...
手続き引数仕様の手続き頭部の中の識別子の出現は,その識別子の引数名としての定義位置及び結合し
.....
た手続き名としての定義位置となる。前者の領域は,それを直接に含む仮引数並びとし,後者の領域は,
それを仮引数とするブロック(もしあれば)とする。
――――― [JIS X 3008 pdf 28] ―――――
25
X 3008-1994 (ISO/IEC 7185: 1990)
. ...
関数引数仕様の関数頭部の中の識別子の出現は,その識別子の引数名としての定義位置及び結合した関
.....
数名としての定義位置となる。前者の領域は,それを直接に含む仮引数並びとし,後者の領域は,それを
仮引数とするブロック(もしあれば)とする。
..
参考2. 仮引数並びが手続き引数仕様又は関数引数仕様に含まれている場合,対応する手続きブロッ
ク又は関数ブロックは存在しない。
.
6.6.3.2 値引数
仮引数及び結合した変数名は,同じ変数を表す。仮引数の型は,値引数仕様の型名が表
.
す型とする。仮引数の型は,ファイル型の成分型とすることができる型(6.4.3.5参照)でなければならな
い。実引数(6.7.3及び6.8.2.3参照)は,式でなければならない。その値は,仮引数の型に対して代入可能
でなければならない。ブロックの駆動の際,その時点の式の値が仮引数の表す変数に与えられる。
.
6.6.3.3 変数引数
実引数は,変数アクセスでなければならない。実引数の型は,変数引数仕様の型名が
表す型と同じでなければならない。仮引数の型は,この型とする。実引数は,ブロックの駆動の前にアク
セスされる。アクセスされた変数は,そのブロックの駆動の間,参照中とする。対応する仮引数及び結合
した変数名は,駆動の間,この変数を表す。
実変数引数は,可変部の選択子であるフィールドを表してはならない。実変数引数は,詰めありの型を
もつ変数の成分を表してはならない。
6.6.3.4 手続き引数
実引数(6.7.3及び6.8.2.3参照)は,手続き名でなければならない。この手続き名
..
の定義位置は,プログラムブロックに含まれていなければならない。実引数の表す手続きが仮引数並びを
.....
もつ場合,手続き引数仕様が直接に含む仮引数並びは,それと同形でなければならない。そうでない場合,
..
手続き引数仕様は,仮引数並びを含んではならない。仮引数及び結合した手続き名は,ブロックの駆動の
間,実引数を表す。
6.6.3.5 関数引数
実引数(6.7.3及び6.8.2.3参照)は,関数名でなければならない。この関数名の定義
..
位置は,プログラムブロックに含まれていなければならない。実引数の表す関数が仮引数並びをもつ場合,
.....
関数引数仕様が直接に含む仮引数並びは,それと同形でなければならない。そうでない場合,関数引数仕
.. .....
様は,仮引数並びを含んではならない。関数の結果の型と関数引数仕様が直接に含む結果型が表す型は,
同じでなければならない。仮引数及び結合した関数名は,ブロックの駆動の間,実引数を表す。
.....
6.6.3.6 引数並びの同形性
二つの仮引数並びは,同じ個数の仮引数区域を直接に含み,かつ対応する位
置にある仮引数区域同士が一致するときに,同形であるという。二つの仮引数区域は,次の(a)(e)の条件
のうちのいずれかが成立するときに,一致するという。
(a) 双方が値引数仕様で,同じ個数の仮引数を含み,それぞれの値引数仕様の.型名が同じ型を表す。
(b) 双方が変数引数仕様で,同じ個数の仮引数を含み,それぞれの変数引数仕様の.型名が同じ型を表す。
(c) 双方が手続き引数仕様で,それぞれの手続き頭部の.仮引数並びが同形である。
(d) 双方が関数引数仕様で,それぞれの関数頭部の.仮引数並びが同形であり,かつそれぞれの関数頭部の.
..
結果型の含む型名が同じ型を表す。
(e) 双方が値整合配列仕様であるか,又は双方が変数整合配列仕様であるかのいずれかであり,かつそれ
..
ぞれの整合配列引数仕様が同じ個数の仮引数及び同等な整合配列形式を含む。二つの整合配列形式は,
次の(1)(4)の条件すべてが成立するときに,同等であるという。
.....
(1) それぞれの整合配列形式が添字型仕様を一つだけ直接に含む。
(2) それぞれの添字型仕様の.順序型名が同じ型を表す。
..... .
(3) 整合配列形式の直接に含む(成分の)整合配列形式が同等であるか,又は整合配列形式の型名が同
じ型を表す。
――――― [JIS X 3008 pdf 29] ―――――
26
X 3008-1994 (ISO/IEC 7185: 1990)
(4) 双方の整合配列形式が詰めあり整合配列形式であるか,又は双方が詰めなし整合配列形式である。
参考1. 整合配列形式の省略形とそれに対応する完全形とは,等価とする(6.6.3.7参照)。
2. (e)の扱いについては,5.1(a), 5.1(b), 5.1(c), 5.2(a)及び5.2(b)を参照のこと。
6.6.3.7 整合配列引数
参考 6.6.3.7の扱いについては,5.1(a), 5.1(b), 5.1(c), 5.2(a)及び5.2(b)を参照のこと。
.. ...
6.6.3.7.1 一般規則
整合配列引数仕様に含まれる識別子並びの中の識別子の出現は,その識別子の引数
.....
名としての定義位置及び結合した変数名としての定義位置となる。前者の領域は,それを直接に含む仮引
数並びとし,後者の領域は,それを仮引数とするブロック(もしあれば)とする。この変数名を整合配列
引数という。
...
添字型仕様の中の識別子の出現は,その識別子の限界名としての定義位置となる。この定義位置の領域
.....
は,それを直接に含む仮引数並び及びその仮引数並びで指定される仮引数をもつブロック(もしあれば)
とする。
仮引数区域 > 整合配列引数仕様 .
整合配列引数仕様 = 値整合配列仕様 | 変数整合配列仕様 .
値整合配列仕様 = 識別子並び : 整合配列形式 .
変数整合配列仕様 = var 識別子並び : 整合配列形式 .
整合配列形式 = 詰めあり整合配列形式 | 詰めなし整合配列形式 .
詰めあり整合配列形式 = packed array [ 添字型仕様 ] of 型名 .
詰めなし整合配列形式 = array [ 添字型仕様 [{ ; 添字型仕様}] ]
of( 型名 | 整合配列形式 ) .
添字型仕様 = 識別子 .. 識別子 : 順序型名 .
因子 > 限界名 .
限界名 = 識別子 .
参考1. 仮引数区域の構文規則は,6.6.3.1にもある。因子の構文規則は,6.7.1にもある。
.....
整合配列形式が整合配列形式を直接に含む場合,省略形が許容されていなければならない。省略形は,
完全形の“] of array [”をセミコロンで置き換えた形とする。省略形と完全形とは,等価とする。
例 array [u..v : T1] of array [j..k : T2] of T3
array [u..v : T1; j..k : T2] of T3
ブロックの駆動の間,添字型仕様の最初の識別子の引用は,実引数の型の,対応する添字型(6.6.3.8参
照)の最小値を表す。添字型仕様の2番目の識別子の引用は,添字型の最大値を表す。
参考2. 限界名が表すものは,定数でも変数でもない。
一つの整合配列引数仕様の中に現れる仮引数に対応する実引数(6.7.3及び6.8.2.3参照)の型は,すべて
同じでなければならない。実引数の型は,整合配列形式に整合(6.6.3.8参照)していなければならない。
仮引数の型は,他のどの型とも違う配列型とする。この配列型の成分型は,整合配列引数仕様によって定
まる整合配列引数の固定成分型とする。その添字型は,実引数の型の添字型のうち,整合配列引数仕様の
.. .. ..
含む整合配列形式が含む添字型仕様に対応する(6.6.3.8参照)添字型とする。整合配列引数仕様の含む整
..
合配列形式が含む型名が表す型を,その整合配列引数仕様によって定まる整合配列引数の固定成分型とい
う。
参考3. 仮引数のもつ型は,配列型によって表されていないから,文字列型(6.4.3.2参照)とはなら
ない。
――――― [JIS X 3008 pdf 30] ―――――
次のページ PDF 31
JIS X 3008:1994の引用国際規格 ISO 一覧
- ISO/IEC 7185:1990(IDT)
JIS X 3008:1994の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語