JIS X 3003:1993 電子計算機プログラム言語Full BASIC | ページ 13

                                                                                             57
X 3003-1993
dim文に書いてはならない。
(33) 参照仮引き数としてゼロ番の経路を書いてはならない。
(34) 内部sub宣言に書く副プログラム名は,同じプログラム単位中のどこか別の場所で内部副プログラム
定義によって定義しておかなければならない。
(35) xternal-sub宣言に書く副プログラム名は,プログラム中のどこか別の場所で,外部副プログラム定
義によって定義しておかなければならない。
9.2.3 例 構文の例を次に示す。
100 SUB exchange(a,b)
110 LET t=a
120 LET a=b (2)
130 LET b=t
140 END SUB
SUB CALC(X,Y,Z$) (4)
SUB SORT(A(),B(,),A$,#3) (4)
2000 EXTERNAL SUB OPEN (#1, fname$, result) (13)
CALL CALC (3*A+2, 7715, ”NO”) (14)
CALL SORT (Zvect, Ymat, (L$), #N) (14)
9.2.4 意味 意味は,次による。
(1) 副プログラムの実行
(1.1) all文 (call-statement) を実行すると,call文で指名された副プログラムに制御が移る。副プログラ
ムの実行は,sub文の次の行から開始され,次のいずれかになるまで,順番に続けられる。
(a) 行の実行によって,他の動作が指示される。
(b) 続行不能な例外状態になる。
(c) hain文が実行される。
(d) top文又はexit-sub文が実行される。
(e) nd-sub行に到達する。
(1.2) nd-sub行は,副プログラムの物理的な終りを示すとともに,この行を実行すると,副プログラム
の実行を終了させる。exit-sub文 (exit-sub-statement) を実行すると,その文を含む最も内側の副プ
ログラムの実行が終了する。副プログラムの実行が終了すると,その副プログラムの実行を開始さ
せたcall文の次の行から実行を続ける。
(1.3) 副プログラム中でstop文を実行すると,そのプログラム全体の実行が終了する。
(1.4) 副プログラムは,直接に又は他の手続きを通して間接に,自分自身を呼び出してもよい。すなわち,
再帰的な副プログラム呼出しが許される。
(1.5) 副プログラム定義中の行は,その副プログラムがcall文によって引用されない限り実行されること
はない。プログラムの実行がsub文の行に到達すると,何もしないで対応するend-sub行の次の行
に進む。
(2) 副プログラムの引き数
(2.1) all文を実行すると,その参照実引き数 (procedure-argument) が左から右に順に,呼び出される副プ
ログラムのsub文 (sub-statement) 中の対応する参照仮引き数 (procedure-parameter) と同一のもので

――――― [JIS X 3003 pdf 61] ―――――

58
X 3003-1993
あるとされる。
(2.2) 参照実引き数のうち数値変数名及び部分文字列指定を伴わない文字列変数名は,参照によって (by
reference) 渡される。すなわち,副プログラム中の参照仮引き数のすべての引用は,対応する参照
実引き数の引用になり,その参照仮引き数への代入は,対応する参照実引き数への代入になる。
(2.3) 参照実引き数が配列要素名である場合には,その添字は,副プログラムが呼び出されるたびに入口
で1回だけ評価される。
(2.4) 参照実引き数が式であり,数値変数名ではなく,部分文字列指定を伴わない文字列変数名でもない
場合,その参照実引き数は,副プログラムが呼び出されるたびに入口で1回だけ評価される。得ら
れた値が,その副プログラムに対して局所的な場所に割り当てられる。この局所的な値は,対応す
る参照仮引き数の値として使用される。その参照仮引き数への代入は,この局所的な場所への代入
となる。
参照実引き数のこの評価は,左から右に順に評価される。
(2.5) 仮配列 (formal array) である参照仮引き数を参照すると,参照実引き数部の対応する配列を参照す
ることになる。同様に,そのような配列に対して代入や上下限の再定義 (redimensioning) を行うと,
参照実引き数部の対応する配列に対して代入や上下限の再定義を行うことになる。副プログラムの
入口では,参照仮引き数の仮配列は,対応する参照実引き数と同じ上下限をもつ。
(2.6) 文字列単純変数名又は文字列配列名である参照仮引き数の文字列の最大長は,それらの引き数が値
によって (by value) 渡される場合は処理系定義の省略時想定値とし,参照によって渡される場合は
対応する参照実引き数の文字列の最大長とする。
(2.7) ある配列とその要素の両方が一つのcall文の参照実引き数として使用され,その配列が副プログラ
ムの実行中に上下限を再定義されたとき,配列要素に対応する参照仮引き数に対するそれ以降の参
照の結果は,処理系定義とする。
(2.8) 参照実引き数が経路式 (channel-expression) である場合,その経路式は,副プログラムが呼び出され
るたびに入口で1回だけ評価される。副プログラム中で対応する参照仮引き数の値を参照すると,
評価された結果の経路が使用される。この経路に割り当てられたファイルの性質(11.1.4参照)は,
そのまま副プログラムに渡される。副プログラム中でファイルの性質及び内容を変更した場合,そ
の変更は,どの経路番号で参照したとしても直ちに有効とし,副プログラムから出た後もそのまま
有効とする。
(2.9) all文が実行されるときに,参照実引き数で示される経路にファイルが割り当てられていなくても
よい。副プログラム中のopen文でその経路にファイルを割り当てたとき,その割当ては,副プロ
グラムから出た後もそのまま有効とする。
(3) 変数,配列,経路番号及び内部データの有効範囲
(3.1) 副プログラム定義の参照仮引き数部に書く参照仮引き数のうち,値によって渡される参照仮引き数
は,その副プログラム定義の毎回の呼出しに対して局所的とする。すなわち,副プログラム定義の
外部で使われている同じ名前の変数や配列とは,別のものとする。
参照によって (by reference) 渡される参照仮引き数に関しては,その名前は副プログラム定義の
毎回の呼出しに対して局所的とするが,その名前が参照する対象は対応する参照実引き数と同じも
のとする[9.2.4(2)参照]。
(3.2) 副プログラム定義において仮引き数に指定されていない変数と配列の扱いは,その副プログラム定
義が内部副プログラム定義か外部副プログラム定義かによって異なる。

――――― [JIS X 3003 pdf 62] ―――――

                                                                                             59
X 3003-1993
副プログラム定義が外部副プログラム定義である場合,これらの変数と配列は,そのプログラム
単位の毎回の呼出しに対して局所的とする。すなわち,その副プログラム定義の外部で使われてい
る名前,又は,それ以前のその副プログラム定義の呼出しのときにその中で使われた名前とは,た
とえ同じつづりであっても別のものとする。更に,これらの変数や配列が副プログラム定義の呼出
しのたびに初期化されるか否かは,処理系定義とする。ただし,その処理系定義は,主プログラム
及び並行単位における変数や配列の初期化と同様に,一貫していなければならない。
副プログラム定義が内部副プログラム定義である場合,これらの変数と配列とはそのプログラム
単位に広域的とし,代入された値は副プログラム定義の呼出しのたびに保存される。すなわち,こ
れらの値が内部副プログラム定義の実行中に変えられたならば,呼び出したプログラム単位に戻っ
た後でもこの変更は有効とする。
(3.3) 参照仮引き数でない経路番号の有効範囲は,(ゼロ番の経路を除き)常にプログラム単位とする。副
プログラム定義中のゼロ番でない経路番号は,外部副プログラム定義においては毎回の呼出しに対
して局所的とし,内部副プログラム定義においてはその副プログラム定義を含むプログラム単位に
広域的とする。
ゼロ番の経路は,プログラム全体に広域的とする。
ファイルは,使用する前にあらかじめopen文によって,プログラム単位中のゼロ番でない経路
に割り当てられていなければならない。副プログラム定義に対して局所的な経路に割り当てられた
ファイルは,その副プログラム定義の実行が終了する時点で自動的に閉じられる。
(3.4) 内部データの有効範囲は,常にプログラム単位とする。
外部副プログラム定義中のdata文のデータ要素は,そのプログラム単位の毎回の呼出しに対して
局所的とする。したがって,このような副プログラム定義中のread文及びrestore文は,その副プ
ログラム定義中のdata文のデータ要素だけを参照し,他のプログラム単位中のデータ要素を参照す
ることはない。このような副プログラム定義中のデータ列に対する指示子は,副プログラム定義が
呼び出されるたびにデータ列の先頭に戻される(10.1参照)。
内部副プログラム定義中のdata文のデータ要素は,そのプログラム単位におけるデータ列の一部
分とする。そして,このような副プログラム定義中のread文やrestore文は,そのプログラム単位
のデータ列全体を参照する。
9.2.5 例外状態 なし。
9.2.6 注意 注意は,次による。
(1) all文があって,それが引用する内部副プログラム定義がそれより後に書いてある場合に,処理系は,
内部sub宣言を省略できるように拡張してもよい。
(2) 別名
(2.1) ある対象に対して,同じ有効範囲をもつ二つ以上の異なる名前が存在するとき,別名 (alias) がある
という。仮引き数が参照によって渡されるときに,ある状況下で別名が作られる。仮引き数が値に
よって渡される場合は,それぞれの仮引き数に対して別の対象が生成されるので,別名が作られる
ことはない。
(2.2) 次の状況下でcall文によって別名が作られる。
(a) 値を丸めた結果が同じ整数値になる経路式を,経路番号である複数の仮引き数に渡す。
(b) 同じ実配列名を複数の仮配列宣言に渡す。
(c) 同じ単純変数名又は配列要素名を,単純変数名である複数の仮引き数に渡す。

――――― [JIS X 3003 pdf 63] ―――――

60
X 3003-1993
(d) ある配列を仮配列宣言に渡し,かつ,その配列の要素を単純変数名である仮引き数に渡す。
(e) 経路式を内部副プログラムに渡す。
(f) 経路式でない実引き数を,参照によって内部副プログラムに渡す。
(2.3) (2.1)の(a)(d)では,二つ以上の仮引き数が同じ対象又は同じ対象の一部を指名するので別名が生じ
る。(e)及び(f)では,一つの対象が,仮引き数として,及びプログラム単位全体に対して広域的な対
象としての両方の形で,内部副プログラムから“見える”ので別名が生じる。
(2.4) 別名のある参照仮引き数を使って対象の状態を変更すると,その変更は,それ以後のすべての参照
において,どの名前を使って参照するかに関係なく直ちに有効となる。参照仮引き数によって参照
される対象の状態を変える事象は,代入,入出力操作及び配列上下限の再定義である。
(2.5) 規格合致処理系では,次のプログラムのprint文は実行されない。
100 DECLARE INTERNAL SUB S
110 LET A=0
120 CALL S(A,A)
130 SUB S(B,C)
140 LET A=1
150 LET B=2
160 LET C=3
170 IF A<>B OR B<>C OR A<>C THEN
180 PRINT ”This shouldnt happen.”
190 END IF
200 END SUB
210 END
(3) 次の事項に関する9.1.6の注意は,副プログラムに対しても同様に適用する。
(a) 異なるcollate選択子をもつプログラム単位は,誤りとはしない[9.1.6(1)参照]。
(b) 定義又は宣言されていながら引用されない関数名は,誤りとはしない[9.1.6(2)参照]。
(c) 定義が宣言に先行する関数名は,内部関数定義では誤りとはしない[9.1.6(3)参照]。
(d) プログラム単位中で引用する外部関数名は,そのプログラム単位中で必ず宣言しなければならない。
内部関数名は,必ずしも宣言しなくてもよい[9.1.6(4)参照]。
(e) 外部関数と同じ名前の内部関数を使ってもよい[9.1.6(5)参照]。
参考 ANSI X3.113では,ここが“異なったプログラム単位においては”となっているが,誤りであ
るので,TIBによって訂正した。

9.3 プログラム連鎖

9.3.1  概要 chain文 (chain-statement) は,別々のプログラムを利用者の介入なしに連続して実行させる。
このような機能は,大きなプログラムを分割するのに有効である。
9.3.2 構文 構文は,次による。
(1) hain文=CHAIN プログラム指示名{WITH 値実引き数部}?
(2) プログラム指示名=文字列式
(3) hain文中の値実引き数部に書く値実引き数とprogram行中の値仮引き数部に書く値仮引き数との結
合は,定義関数に対する規定と同じ規則を適用する(9.1参照)。
9.3.3 例 構文の例を次に示す。

――――― [JIS X 3003 pdf 64] ―――――

                                                                                             61
X 3003-1993
CHAIN ”PROG2” (1)
CHAIN A$ WITH(X,FILENAME$) (1)
9.3.4 意味 意味は,次による。
(1) hain文は,現在のプログラムの実行を終了し,すべてのファイルを閉じ,プログラム指示名
(program-designator) によって指示されたプログラムの実行を開始する。プログラムを関連付ける方法
は,処理系定義とする。
(2) hain文によって実行されるプログラムがprogram行 (program-name-line) を含む場合には,chain文
の値実引き数が評価され,その値がprogram行の対応する値仮引き数に代入される。すなわち,値実
引き数は,値仮引き数に値によって (by value) 渡される。
仮配列の上下限は,関数に対して配列引き数を渡す場合の規則(9.1参照)に従って,対応する実配
列の上下限に等しくなるように調整される。
(3) プログラム指示名において,対応する英大文字と英小文字を等価なものとするか否かは,処理系定義
とする。
(4) hain文によって実行されるプログラム中の変数の初期値は,処理系定義とする。
9.3.5 例外状態 例外状態は,次による。
(1) プログラム指示名によって識別されたプログラムが利用可能でない。(10005,続行不能。)
(2) hain文の値実引き数の個数及び型が,chain文によって実行されるプログラムのprogram行の対応す
る値仮引き数の個数及び型と一致しないか,又は値仮引き数部をもつprogram行が存在しない。(4301,
続行不能。)
(3) 実配列の次元数が,対応する仮配列の次元数と同じでない。(4302,続行不能。)
(4) 有効なarithmetic選択子の一致しないプログラム間で,chain文によって数値型の引き数を渡す。
(4303,続行不能。)
9.3.6 注意 注意は,次による。
(1) 通常の処理系においては,プログラム指示名は,そのプログラムが収められているファイルの名称で
ある。chain文によって実行されるプログラムは,BASICプログラムである必要はない。
(2) 4301,4302及び4303の例外状態の報告は,chain文のあるプログラム,chain文によって実行される
プログラム又はその他の中間のシステムプログラムのいずれが行ってもよい。

10. 入出力

10.0 概要

 入出力機能によって,BASICプログラムがデータの集まりを入出力する。プログラムは,入
力データをそのプログラムのdata文 (data-statement) から得ることもできるし,プログラムの外部の標準
入力源 (standard source) 又は指名した入力源(11.4参照)から得ることもできる。出力データを,プログ
ラムの外部の標準出力先 (standard destination) 又は指名した出力先(11.3及び11.5参照)に送り出すこと
ができる。

10.1 内部データ

10.1.1 概要 read文 (read-statement) は,data文 (data-statement) によって作られたデータ列 (data
sequence) にある値を変数に代入する。restore文 (restore-statement) は,プログラム中の同じデータを,再
び読めるようにする。
10.1.2 構文 構文は,次による。
(1) ead文⊃READ{if-missing句 コロン}? 変数名並び

――――― [JIS X 3003 pdf 65] ―――――

次のページ PDF 66

JIS X 3003:1993の引用国際規格 ISO 一覧

  • ISO/IEC 10279:1991(IDT)

JIS X 3003:1993の国際規格 ICS 分類一覧

JIS X 3003:1993の関連規格と引用規格一覧