この規格ページの目次
47
X 3003-1993
160 LOOP
ここで,vは,数値単純変数名とする。own1とown2は,そのfor区に関係付けられている変数と
し,利用者からは参照できない。同様に,行番号120,130,140及び160は図示するためだけのもの
であって,for区が実際にそのような行番号を生成するわけではない。変数own1とown2は,他のfor
区に関係付けられている同様の変数とは別のものとする。
この置換えにおいて,for行への行番号分岐は最初のlet文(行番号110の行)への行番号分岐と解
釈され,next行への行番号分岐は最後のlet文(行番号150の行)への行番号分岐と解釈される。
(4) or文においてstep句を省略すると,増分 (increment) として+1が想定される。
(5) xit-do文 (exit-do-statement) を実行すると,そのexit-do文を含む最も内側のdo区のloop行の次の行
から実行を続ける。exit-for文 (exit-for-statement) を実行すると,そのexit-for文を含む最も内側のfor
区のnext行の次の行から実行を続ける。
8.3.5 例外状態 なし。
8.3.6 注意 next文を経由してfor区を出たときには,制御変数の値は繰返し区の中で最後に使われた値
の“次の値”(使われなかった最初の値)となる。それ以外でfor区を出たときには,制御変数の値はその
ときの値となる。
例 FOR I=1 TO J STEP 2
(一連の文)
NEXT I
例に示すfor区において,Jがゼロである場合には,一連の文を実行しないでfor区から出る。このとき,
制御変数Iの値は1(使われなかった最初の値)となる。Jが10である場合,next文を経由してfor本体
を出たときには,制御変数Iの値は11(最後に使われた値9の“次の値”)となる。next文を経由しない
で,例えば3回目の実行中にfor本体を出たときには,制御変数Iの値は5(そのときの値)となる。
8.4 判定構造
8.4.1 概要 if文 (if-statement) は,条件分岐,一つの単純実行文の条件付き実行,又は二つの単純実行
文の一方の実行を行う。
if区 (if-block) は,行の連なりの条件付き実行,又は幾つかの行の連なりのうちの一つの条件付き実行
を行う。
select-case区 (select-block) は,式の値に基づいて,幾つかの行の連なりのうちのどれか一つの実行を行
う。
8.4.2 構文 構文は,次による。
(1) f文=IF 論理式 THEN 単純実行動作{ELSE 単純実行動作}?
(2) 単純実行動作=単純実行文|行番号
(3) f区=if-then行 then本体 elseif区* else区? end-if行
(4) f-then行=行番号 IF 論理式 THEN 行末部
(5) hen本体=区*
(6) lseif区=elseif行 区*
(7) lseif行=行番号 ELSEIF 論理式 THEN 行末部
(8) lse区=else行 区*
(9) lse行=行番号 ELSE 行末部
(10) nd-if行=行番号 END IF 行末部
――――― [JIS X 3003 pdf 51] ―――――
48
X 3003-1993
(11) elect-case区=select-case行 注釈行* case区 case区* case-else区? end-select行
(12) elect-case行=行番号 select-case文 行末部
(13) elect-case文=SELECT CASE 式
(14) ase区=case行 区*
(15) ase行=行番号 case文 行末部
(16) ase文=CASE 照合項目並び
(17) 照合項目並び=照合項目{コンマ 照合項目}*
(18) 照合項目=定数|範囲指定
(19) 範囲指定={定数 TO|IS 比較演算子} 定数
(20) ase-else区=case-else行 区*
(21) ase-else行=行番号 CASE ELSE 行末部
(22) nd-select行=行番号 END SELECT 行末部
(23) elect-case区中のcase文の中に書く定数は,select-case文中の式と同じ型(すなわち,数値又は文字
列のどちらか)でなければならない。
(24) elect-case区中の照合項目並びで指定する範囲及び定数は,重複してはならない。
(25) f区,then本体,elseif区,else区,select-case区,case区及びcase-else区において,それらの外部に
書く行番号分岐中の行番号は,内部にある行を参照してはならない。ただし,if区のif-then行及び
select-case区のselect-case行は,参照してもよい。
(26) lseif区,else区,case区及びcase-else区の内部に書く行番号分岐中の行番号は,それらに対応する
elseif行,else行,case行及びcase-else行を参照してはならない。
8.4.3 例 構文の例を次に示す。
IF X=>Y2 THEN GOSUB 900 ELSE GOSUB 2000 (1)
IF X$=”NO” OR X$=”STOP” THEN LET A=1 (1)
IF A=B THEN 100 (1)
IF A$=B$ THEN 200 ELSE 300 (1)
10 IF X=INT(X) HEN
20 PRINT X;”IS AN INTEGER”
30 ELSE (3)
40 PRINT X;”IS NOT AN INTEGER”
50 END IF
100 IF A=0 THEN
110 PRINT ”ONE ROOT”
120 ELSEIF DISC<0 THEN
130 PRINT ”COMPLEX ROOTS” (3)
140 ELSE
150 PRINT ”REAL ROOTS”
160 END IF
――――― [JIS X 3003 pdf 52] ―――――
49
X 3003-1993
10 SELECT CASE A$ (1:1)
20 CASE ”A”TO”Z”, ”a”TO”z”
30 PRINT A$;”starts with a letter”
40 CASE ”0”TO“9”
(pdf 一覧ページ番号 )
50 PRINT A$;”starts with a digit”
60 CASE ELSE
70 PRINT A$;”doesn't start with a letter or a digit”
80 END SELECT
10 SELECT CASE X
20 CASE IS<0
30 PRINT X;”is negative”
40 CASE IS>0
(pdf 一覧ページ番号 )
50 PRINT X;”is positive”
60 CASE ELSE
70 PRINT X;”is zero”
80 END SELECT
8.4.4 意味 意味は,次による。
(1) f文は,論理式の値が真である場合,機能語THENの後ろに単純実行文があれば,その単純実行文を
実行し,THENの後ろに行番号があれば,その行番号の行からプログラムの実行を続ける。論理式の
値が偽である場合,機能語ELSEの後ろに単純実行文があれば,その単純実行文を実行し,ELSEの
後ろに行番号があれば,その行番号の行からプログラムの実行を続け,ELSEがなければ,順序どお
りに,すなわちif文の次の行から実行を続ける。
(2) f区の実行は,次による。
(a) hen本体,elseif区又はelse区が,区を一つも含んでいなくても,結果は,注釈行1行からなる区
を一つ含んでいる場合と同じとする。
(b) f-then行の中の論理式の値が真である場合,then本体の1行目から実行を続ける。
if-then行の論理式の値が偽である場合,elseif区があれば,それらのelseif行の論理式を順に評価
する。真である論理式が最初に見つかったところで,そのelseif区中の区の1行目から実行を続け
る。
真である論理式を含むelseif行がない場合,else区があれば,そのelse区中の区の1行目から実行
を続け,else区がなければ,end-if行の次の行から実行を続ける。
(c) hen本体,elseif区又はelse区の最後まで実行した後は,end-if行の次の行から実行を続ける。
(3) elect-case区では,select-case文 (select-statement) 中の式を評価し,その値をcase文 (case-statement) 中
の照合項目と一致するまで順に比較する。式の値が次のいずれかであるときに,“一致”したという。
(a) 定数の照合項目と等しい。
(b) Oを含む範囲指定の,第の定数の値以上で第二の定数の値以下である。
(c) 範囲指定の中の,比較演算子と定数によって示される関係を満足する。
一致すると,そのcase文を含むcase区中の区を実行する。一致しないとき,case-else区があれば,
それを実行する。case区又はcase-else区の最後まで実行した後は,end-select行の次の行から実行
――――― [JIS X 3003 pdf 53] ―――――
50
X 3003-1993
を続ける。
(4) 二つ以上の区を入れ子構造にすることができる。この場合,for区と同じ制限が適用される[すなわ
ち,外側の区は,内側の区を完全に含んでいなければならない(8.3.2参照)]。
8.4.5 例外状態 例外状態は,次による。
(1) ase-else区のないselect-case区の実行で,どの照合項目でも一致しない。(10004,続行不能。)
8.4.6 注意 なし。
9. プログラム分割
9.0 概要
BASICプログラムは,複数の論理的な構造に分割 (segmentation) して書くことができる。
(1) ASICは,プログラムの分割のために,四つの機構を提供する。
関数の値は,数値式及び文字列式の中で使用することがで
(a) 利用者定義関数 (user-defined function)
きる。
(b) 副プログラム (subprogram) の定義 副プログラムは,call文によって呼び出され,参照引き数を介
して情報伝達を行う。
(c) プログラム連鎖 (chaining)別々のプログラムを,利用者の介入なしに逐次的に実行させる。
(d) 図形絵 (graphical picture) の定義 13.5参照。
(2) 関数及び副プログラム(両者を合わせてルーチンと呼ぶ。)には,内部及び外部の2種類がある。この
区別は,13.5で規定する絵定義にも適用する。外部ルーチンは,主プログラムの後ろに続けて書く独
立したプログラム単位である。内部ルーチンは,プログラム単位(主プログラム,外部ルーチン又は
並行単位)の中に含まれ,そのプログラム単位の一部とみなされる。内部ルーチンの中に更に内部ル
ーチンを書くことはできない。
(3) 一般に,外部ルーチンは,他のプログラム単位とは何も(例えば,変数,data文,内部ルーチン,選
択子,デバッグ状態などを)共有しない。外部ルーチンと他のプログラム単位との情報交換は,引き
数又は(外部関数の場合には)関数値によって行う。
一方,内部ルーチンは,それを含むプログラム単位とすべてのものを共有する。ただし,その内部
ルーチンの仮引き数及びそのgosub用の行番号の棚は,共有しない。内部ルーチンに局所変数は,存
在しない。
参考 有効範囲については,附属書B(参考)に一覧を示す。ANSI X3.113では,行番号の棚に触れ
ていないが,誤りであるので,TIBによって訂正した。
(4) 一つのプログラム単位中で,ルーチンは,それを呼び出すどの文よりも早い位置に定義又は宣言がな
ければならない。ルーチンを定義又は宣言だけしておいて,それを一度も呼び出さなくても誤りでは
ない。
外部ルーチンは,プログラム全体のどこからでも呼び出すことができる。内部ルーチンは,それを
含むプログラム単位の中からだけ呼び出すことができる。
(5) 内部ルチン及び外部ルーチンの中にある行番号分岐で,ルーチンの外部の行番号を参照することはで
きない。ルーチンの外部にある行番号分岐で,ルーチンの内部の行番号を参照することもできない。
9.1 利用者定義関数
9.1.1 概要 BASICは,プログラマの便宜のために組込み関数を提供する(5.4,6.4,その他参照)。組
込み関数に加えて,プログラマが,プログラム単位又はプログラムの内部で新しい関数を定義することも
できる。
――――― [JIS X 3003 pdf 54] ―――――
51
X 3003-1993
9.1.2 構文 構文は,次による。
(1) 関数定義=内部関数定義|外部関数定義
(2) 内部関数定義=def行|内部function行 区* end-function行
(3) ef行=行番号 def文 行末部
(4) ef文=数値def文|文字列def文
(5) 数値def文⊃DEF 数値定義関数名 値仮引き数部? 等号 数値式
(6) 数値定義関数名=数値識別名
(7) 文字列def文=DEF 文字列定義関数名 最大長指定? 値仮引き数部? 等号 文字列式
(8) 文字列定義関数名=文字列識別名
(9) 値仮引き数部=左括弧 値仮引き数{コンマ 値仮引き数}* 右括弧
(10) 値仮引き数⊃単純変数名|仮配列宣言
(11) 仮配列宣言=配列名 左括弧 コンマ* 右括弧
(12) 内部function行⊃ 行番号 FUNCTION{数値定義関数名|文字列定義関数名 最大長指定?}
値仮引き数部? 行末部
(13) nd-function行=行番号 END FUNCTION 行末部
(14) 外部関数定義=external-function行 手続き区* end-function行
(15) xternal-function行⊃ 行番号 EXTERNAL FUNCTION{数値定義関数名|文字列定義関数名
最大長指定?} 値仮引き数部? 行末部
(16) 数値関数定義let文=LET 数値定義関数名 等号 数値式
(17) 文字列関数定義let文=LET 文字列定義関数名 等号 文字列式
(18) xit-function文=EXIT FUNCTION
(19) 宣言指定⊃def宣言|内部function宣言|external-function宣言
(20) ef宣言=DEF 定義関数名並び
(21) 内部function宣言=FUNCTION 定義関数名並び
(22) xternal-function宣言=EXTERNAL FUNCTION 定義関数名並び
(23) 定義関数名並び=定義関数名{コンマ 定義関数名}*
(24) 定義関数名⊃数値定義関数名|文字列定義関数名
(25) 内部関数定義の外部の行番号分岐中の行番号は,内部関数定義の内部にある行を参照してはならない。
ただし,内部function行は,参照してもよい。内部関数定義の内部の行番号分岐中の行番号は,その
内部関数定義の外部にある行及びその先頭の内部function行を参照してはならない。
(26) 外部関数定義の内部の行番号分岐中の行番号は,その外部関数定義の先頭のexternal-function行を参
照してはならない。
(27) 一つのプログラム中で,同じ名前の外部関数定義を2回以上定義してはならない。一つのプログラム
単位中で,同じ名前の内部関数定義を2回以上定義してはならない。
(28) 一つのプログラム単位中で,同じ名前の(内部又は外部)関数を2回以上宣言したり定義したりして
はならない。
(29) 定義関数名が外部関数定義によって定義されている場合,プログラム単位中でその定義関数名を引用
するどの文よりも早い位置に,その定義関数名を含むextern-function宣言のdeclare文を書かなけれ
ばならない。
(30) 定義関数名がdef行以外の内部関数定義によって定義されている場合,そのプログラム単位中でその
――――― [JIS X 3003 pdf 55] ―――――
次のページ PDF 56
JIS X 3003:1993の引用国際規格 ISO 一覧
- ISO/IEC 10279:1991(IDT)
JIS X 3003:1993の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語
JIS X 3003:1993の関連規格と引用規格一覧
- 規格番号
- 規格名称
- JISX0201:1997
- 7ビット及び8ビットの情報交換用符号化文字集合
- JISX0301:2002
- 情報交換のためのデータ要素及び交換形式―日付及び時刻の表記