実数型BASICのサブセットです。数値の表せる範囲はCやJavaのdouble値と同じです。昔のBASICと違い、行番号はありません。一般的なプログラム言語と違い、変数は宣言無しで使えます。変数は数値型のみです。
# 九九の表を出力するプログラム例
for x = 1 to 9
for y = 1 to 9
if x * y < 10 then print " ";
print x * y;" ";
next y
print
next x
end
# 実行
>cb ファイル名
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
ok.
print文とinput文のみで、表示用の文字列を使用できます。文字列はダブルクォーテーション(")でくくります。
print "日本語も使えます。"
識別子や予約語では大文字、小文字は区別されません。
変数「A」と変数「a」は同一の変数です。
次の2行も同じ内容のプログラムです。
IF A = 1 THEN PRINT "ok"
if a = 1 then print "ok"
ただし、文字列の中では大文字、小文字の区別があります。
print "OK"
PRINT "ok"
それぞれ、大文字の"OK"と小文字の"ok"を出力します。
※この仕様の理由はCheapBasicの元がPL/0のため。
変数は宣言無しで使えます。数値型のみです。変数名は1文字目は英文字、2文字目以降は数字または英字で、31文字までです。変数の初期値は0です。
DIM宣言はありません。宣言なしで配列を使えます。
a(0) = a(1) + a(2)
添え字の大きさに制限はありません。配列の次元にも制限はありません。
a(100000,1,2,3,4,5) = 123
「a(1)」と「a」はそれぞれ異なる変数です。
※賢明なかたは気がついているかもしれませんが、連想記憶方式です。つまり、内部的には、「a(100000,1,2,3,4,5)」という変数名で認識されています。この文字列が31文字を超えるとエラーになります。
0以外が真です。
0が偽です。
ステートメントの区切りは「改行」または「:」です。
# 文字列 コメントを記述します。(コメント文は通常のBASICと表記が異なります。)
例: # これはテストプログラムです。
式を計算して変数に代入します。LETキーワードはありません。
例: a = b + c
式が0でなければステートメント列を実行します。0なら次の行から実行を継続します。elseはありません。(後述のマルチステートメントも参照のこと)
例: if (a = 0) and (b = 1) then goto loop
print文の最後が;で終わった場合は改行しません。
引数なしのprint文は、改行します。
例: print "計算結果="; 1 + 2 + 3 + 4; "円"
「,」キーワードはサポートしていません。
標準入力から入力した値を変数に代入します。
例:input "XY="; xy
ラベルを定義します。ラベルで使用できる文字は変数名と同じです。
例:label loop
ラベルを定義した位置に飛びます。
例: goto loop
ラベルを定義した位置に飛びます。
例: gosub sub
gosubで飛んだとき、元の位置に戻ります。
例: return
変数の値を変化させながらnextまで繰り返します。
stepを省略した場合、常にステップ値は1になります。
最後の変数の値が終値に一致せず、終値+ステップ値が正または負の値を超える場合は、超えた時点でループを終了します。
例: for i=0 to 10 step 2
forステートメントの位置に戻って動作を繰り返します。forステートメントで示した条件が満たされた場合は、nextの次に動作が進みます。nextの後の変数名は省略可能です。
例: next
プログラムの実行を終了します。
ステートメントの後で「:」を追加すると同じ行に複数のステートメントを記述できます。if文の後で使った場合、条件に合致した場合のみ実行されます。
例: if a = 1 then print "OK": goto LABEL1
演算子の優先順位は高い順に次の通りです。
- INT (整数化) + - (単項演算子)
- * / MOD (乗算, 除算, 剰余)
- + - (加算, 減算)
- = < > <= >= <> (比較演算)
- NOT (真偽反転)
- AND OR (論理積,論理和)
NOTおよびAND ORの動作はビット演算ではありません。次の動作になります。
- NOT : 0ならば1になる。0でないならば0になる。
- AND : 両辺が0でないならば1になる。そうでないならば0になる。
- OR : 両辺ともに0ならば0になる。そうでないならば1になる。
INTは32ビットの符号付き整数に丸められます。
剰余はC言語の計算方式です。
次の通りです。
- INPUT
- IF
- THEN
- LABEL
- GOTO
- GOSUB
- RETURN
- END
- AND
- OR
- NOT
- MOD
- FOR
- TO
- NEXT
- STEP
- INT
#define値とあるのは、定義値を変更して再コンパイルすれば変更可能です。
属性 | 値 | #define値 | 備考 |
---|---|---|---|
ソースの最大長 | 10000バイト | maxsourcesize | 最後のEOFを含まない長さ |
使用できる変数の最大個数 | 5000 | maxvariable | 変数領域、GOSUB/FORスタック、ラベル領域は共用 |
GOSUB/FORのネスト段数の上限 | 〃 | maxvariable | 〃 |
ラベルの最大個数 | 〃 | maxvariable | 〃 |
変数名の最大長 | 31文字 | maxnamesize | |
ラベル名の最大長 | 30文字 | maxnamesize - 1 | |
配列の添え字の上限値 | 無制限 | - | 整数の最大値まで可能 |
配列の最大次元 | 無制限(注1) | (maxnamesize) | |
文字列定数の最大長 | 1023バイト | maxstrsize |
注1:次元は無制限ですが、連想記憶方式のため、変数を表す文字の長さが制限となります。
例:a(100,200,300,400,500,600,700)
->文字列として31文字を超えるのでエラー