“独自の拡張”

 投稿者:SECOND  投稿日:2009年 1月 2日(金)21時47分5秒
 


十進BASIC の“独自の拡張”だけを、help から書き出してみた。

これをみると、DRAW GRID や、複素数など、重要な計算機能まで該当
しており、純粋な Full Basic でなくて、良かったと思います。


----------------------------------------------
OPTION ARITHMETIC DECIMAL_HIGH  10進1000桁(超越関数は17桁(末尾偶数))
OPTION ARITHMETIC COMPLEX    複素数
OPTION ARITHMETIC RATIONAL    有理数(無理関数は10進17桁(末尾偶数))
----------------------------------------------
RANDOMIZE 5489 ( 引数に0~4294967295)
----------------------------------------------
FACT(x)   xの階乗
PERM(n,r)  順列の数
COMB(n,r)  二項係数(組合せの数)
ROUND(x)  xの小数点以下を丸めた値。
----------------------------------------------
BLEN(a$)     バイトを単位とするa$の文字列長。
SUBSTR$(a$,m,n)  a$のm文字目からn文字目までの部分文字列
MID$(a$,m,n)   a$のm文字目からのn文字
LEFT$(a$,n)    a$のはじめのn文字
RIGHT$(a$,n)   a$の末尾のn文字
----------------------------------------------
GetKeyState(n)  キーの状態を調べる
----------------------------------------------
MAT A=CROSS(B,C)  B,Cの外積(ベクトル積)
--------------------------------------------
MAT REDIM     配列の添字の上下限を再定義
----------------------------------------------
DIM A(N),B(2*N)  添字の上下限指定に変数を含む数値式
----------------------------------------------
色名 "WHITE","BLACK","BLUE","GREEN","RED","CYAN","MAGENTA","YELLOW","GRAY","SILVER",
   "白","黒","青","緑","赤","黄"
----------------------------------------------
SET LINE WIDTH 数値式              線の太さ
PLOT BEZIER: x1, y1 ; x2, y2 ; x3, y3; x4, y4  ベジェ曲線を描く。
SET BEAM MODE "IMMORTAL"  PLOT LINES以外の実行で描点の状態を変えない。
SET BEAM MODE "RIGOROUS"  描点の状態をJISの規定通りにoffにする。
----------------------------------------------
PLOT LABEL ,AT x,y : 文字列式
PLOT LABEL ,AT x,y ,USING 書式指定 : 式, 式 , …, 式
SET TEXT FONT FontName$ ,size
ASK TEXT WIDTH(文字列式) 数値変数   文字列の問題座標系における横幅
SET TEXT BACKGROUND "TRANSPARENT"
SET TEXT BACKGROUND "OPAQUE"
----------------------------------------------
DRAW GRID     x軸方向 間隔1,y軸方向 間隔1の格子を描く。
DRAW GRID(p,q)  x軸方向 間隔p,y軸方向 間隔qの格子を描く。
DRAW AXES     目盛り間隔がx軸方向1,y軸方向1のx軸とy軸を描く。
DRAW AXES(p,q)  目盛り間隔がx軸方向p,y軸方向qのx軸とy軸を描く。
DRAW GRID0
DRAW AXES0
SET AXIS COLOR  軸の色  廃止予定
----------------------------------------------
DRAW circle   原点を中心とする半径1の円を描く。
DRAW disk    原点を中心とする半径1の円とその内部を現在のarea colorで塗りつぶす。
----------------------------------------------
MOUSE POLL x,y,left,right マウスの位置をx,y left,rightにマウスボタンの状態
----------------------------------------------
PIXELX(x)  問題座標xに対応するピクセルx座標
PIXELY(y)  問題座標yに対応するピクセルy座標
WORLDX(x)  ピクセルx座標を問題座標に変換
WORLDY(y)  ピクセルy座標を問題座標に変換
PROBLEMX(x) WORLDX(x)と同義
PROBLEMY(y) WORLDY(y)と同義
----------------------------------------------
SET BITMAP SIZE width, height 描画領域の画素数
----------------------------------------------
FLOOD x,y 点(x,y)を始点として点(x,y)と同色でつながる領域を現在のarea colorで塗りつぶす。
PAINT x,y 点(x,y)を始点としてline colorの点を境界とする領域を現在のarea colorで塗りつぶす。
----------------------------------------------
GLOAD ファイル名  指定された名前の画像ファイルを読み込む。
GSAVE ファイル名  指定された名前で画像を保存する。
----------------------------------------------
SET COLOR MODE "NATIVE"  色指定:下位8ビットが赤,中位8ビットが緑,上位8ビットが青
SET COLOR MODE "REGULAR" パレットを用いる通常モード
COLORINDEX(r,g,b)     色指標を得る関数
----------------------------------------------
SET DRAW MODE HIDDEN   内部にあるビットマップメモリにのみ描画するモード
SET DRAW MODE EXPLICIT  画面とビットマップメモリの双方に描画するモード(標準の状態)
SET DRAW MODE NOTXOR   画面の色と指定された色のNOTXORの色で描く
SET DRAW MODE OVERWRITE 指定された色で描く(標準の状態)
----------------------------------------------
WAIT DELAY 数値式  指定された秒数だけ休止
PAUSE        Enterキーを待つ。
PAUSE 文字列式    文字列式の値を表示してEnterキーを待つ。
----------------------------------------------
EXECUTE ファイル名
EXECUTE ファイル名 WITH (式,式,・・・,式)
EXECUTE NOWAIT ファイル名
EXECUTE NOWAIT ファイル名 WITH (式,式,・・・,式)
PLAY 文字列式     関連付けを利用して文字列式が表すファイルをplayする。
PLAY NOWAIT 文字列式  指定されたプログラムの実行が終わるのを待たずに次の行に進む。
ASSOC PRINT 文字列式  関連付けを利用して文字列式が表すファイルをprintする。
----------------------------------------------
SWAP x,y       変数x,yの値を交換する。
BEEP          警告音を発する。
BEEP 数値式1, 数値式2  (NT/2000/XP) 数値式1は振動数(Hz),数値式2は継続時間(ms)
PLAYSOUND 文字列式     サウンドファイルを再生する。
PLAYSOUND 文字列式 ,ASYNC  再生が終わるのを待たずに次の行に進む。
----------------------------------------------
SET #経路番号 : ENDOFLINE CHR$(13)&CHR$(10)
SET #経路番号 : ENDOFLINE CHR$(10)&CHR$(13)
SET #経路番号 : ENDOFLINE CHR$(13)
SET #経路番号 : ENDOFLINE CHR$(10)
ASK #経路番号 : FILESIZE 数値変数  バイト単位のファイル長
SET DIRECTORY a$     カレントディレクトリを、a$が指定するディレクトリに変更
ASK DIRECTORY s$     カレントディレクトリを表す文字列を、文字列変数s$に代入
FILE GETNAME s$      ファイルを開くダイアログを表示し,指定するファイル名をs$に代入
FILE GETNAME s$, 文字列式  文字列式を既定の拡張子としてファイルダイアログを開く
FILE SPLITNAME (a$) path$, name$, ext$  ファイル名を表す文字列式a$を,3つに分割
FILE RENAME a$,b$            a$が示すファイルの名前をb$に変える
FILE DELETE a$             a$が示すファイルを削除する。
FILE LIST 文字列式,s$         s$には1次元文字列配列を書く。
FILES(文字列式)           文字列式に合致するファイルの数。
----------------------------------------------
OPEN # 数値式 : PRINTER  経路にプリンタを割り当てる
----------------------------------------------
OPEN # 数値式 : TextWindow1
OPEN # 数値式 : TextWindow1 ,ACCESS INPUT
OPEN # 数値式 : TextWindow1 ,ACCESS OUTPUT
OPEN # 数値式 : TextWindow1 ,ACCESS OUTIN
----------------------------------------------
COMPLEX(x , y) 複素数 x+ y i    //複素数モード
RE(z)     zの実部
IM(z)      zの虚部
CONJ(z)     zの共役複素数 CONJ(x + y i)= x - y i
ARG(z)     zの偏角、angle radians(-π< ~<=π) angle degrees(-180°< ~<=180°)
ABS(z)     zの絶対値
SQR(z)     zの平方根(偏角:-90°< ~<=90°)
SQR(-1)= i
EXP(z)     指数関数(角度単位は常にラジアン)
LOG(z)     zの自然対数。実部はlog|z|,虚部はarg z(単位は常にラジアンで -π~π)。
図形変形関数の複素数への拡張( shift(z), scale(z),,, )
----------------------------------------------
NUMER(x)   xの分子(numerator)      //有理数モード
DENOM(x)   xの分母(denominator)
GCD(x,y)   xとyの最大公約数(Greatest Common Divisor)。結果は正符号をもつ。
INTSQR(x)   xの正の平方根の小数点以下を切り捨てた数値。INT(SQR(x))
INTLOG2(x)  xの整数部分の2を底とする対数の整数部分。INT(LOG2(INT(x)))

 

Re: “独自の拡張”

 投稿者:荒田浩二  投稿日:2009年 1月 4日(日)21時51分27秒
  > No.227[元記事へ]

SECONDさんへのお返事です。

これもありますよ。

----------------------------------------------
識別名に漢字が使えるように文法を拡張している。
識別名に使えるのは,JIS文字コード表で"0"(数字のゼロ)以降の文字。
ただし,全角英数字で始まる名前は不可。
----------------------------------------------

全角文字22文字からなる変数名です。(注意;環境依存文字もあります)
10 LET かぃ1BdサΣβДя┴⑰Ⅲ㌍㎡〝㍻℡㊤㈱∮亜=3
20 PRINT かぃ1BdサΣβДя┴⑰Ⅲ㌍㎡〝㍻℡㊤㈱∮亜+5
30 END
 

Re: “独自の拡張”

 投稿者:SECOND  投稿日:2009年 1月 4日(日)22時42分47秒
  > No.229[元記事へ]

漢字 については、次の様に書かれていました。

「Full BASICはコード番号が0から127までの文字を使用することを前提に
 規格化されている。そのため,JISには128番以降の文字を扱うことにしても
 よいという程度のことしか書かれていない。」

これを見ると、むずかしい判断ですね。
仕方が無いので、とりあえず、白石先生が、"独自の拡張"とマークされた個所
だけに、しています。
 

Re: “独自の拡張”

 投稿者:荒田浩二  投稿日:2009年 1月 5日(月)00時08分3秒
  > No.230[元記事へ]

SECONDさんへのお返事です。

なるほど。JISにもあいまいな規定があるのですね。

ところで、あのおかしな変数名を作っていて思ったのですが、白石先生に提案があります。
JISコードでギリシャ文字より後ろから漢字の前までを、識別名から除外してはいかがでしょうか。
ロシア文字を読める人は少ないでしょうし、罫線素片が識別名にふさわしいとも思えません。環境依存文字の使用回避にもなります。
JIS規格とのかねあいもあるでしょうが、ご検討をお願いします。(差し出がましく申し訳ありません)
 

Re: “独自の拡張”

 投稿者:白石 和夫  投稿日:2009年 1月 6日(火)10時04分15秒
  > No.231[元記事へ]

公開するプログラムは,可能な限り,
に示すガイドラインにしたがってください。
独自拡張機能は,他に代替手段が存在しない場合にかぎり用いるのが大原則です。
たとえば,漢字などのマルチバイト文字を識別名に用いることは,代替手段が存在するので,推奨しません。
(外国人が見たら普通の漢字でも変てこな文字です)
 

Re: “独自の拡張”

 投稿者:荒田浩二  投稿日:2009年 1月 6日(火)18時57分16秒
  > No.232[元記事へ]

白石 和夫さんへのお返事です。

早速のご回答ありがとうございます。
個人で利用する以外では、拡張機能は使用してはいけないということですね。
漢字使用はともかく、拡張機能は便利なだけに原則を守るのはなかなか厳しいですが…。
 

Re: “独自の拡張”

 投稿者:白石 和夫  投稿日:2009年 1月 7日(水)16時59分52秒
  > No.233[元記事へ]

JISの範囲外の機能については,将来,変更もありえます。
たとえば,マルチバイト文字の識別名を使えなくする変更の可能性もあります。
(国際化の観点を重視すればその方向に進むことになります。)
なので,規格外の機能の使用は可能なかぎり避けてください。
 

Re: “独自の拡張”

 投稿者:荒田浩二  投稿日:2009年 1月 8日(木)12時57分40秒
  > No.233[元記事へ]

配列の添字の再定義をJISの規格内でできるようにしました。

JISに従うと、配列の宣言で添字には数値定数しか使えなくなります。
あらかじめある程度大きく配列を宣言しておき、MAT文で配列の大きさを変更できます。

DIM A(100),B(100),C(100)
LET m=3
LET n=8
MAT A=ZER(m)
MAT B=ZER(m*n)
MAT C=ZER(m TO n)

ところがMAT文では添字の下限を変更することはできないため、Cの下限は1,上限は6(=n-m+1)になります。
ヘルプでは『添字の下限を変えたいときは,MAT READ文か,拡張機能のMAT REDIM文を用いる。』とあります。
MAT READ C(m TO n) とすればよいわけですが、DATA文を読ませる必要があります。
MAT REDIM C(m TO n) ならば配列要素はそのままで添字の下限を変更できますがJIS規格外です。

次の外部副プログラム redim は、MAT REDIM文と同様の機能を持ちます。

DECLARE EXTERNAL SUB redim
DIM A(100)
LET m=3
LET n=8
CALL redim(A,m,n)  ! MAT REDIM A(m TO n)と同義
PRINT LBOUND(A),UBOUND(A)
END
!
EXTERNAL SUB redim(p(),m,n) !配列の添字の上下限を再定義
WHEN EXCEPTION IN
   DIM q(10000)
   MAT q=p
   MAT READ p(m TO n)
   DATA 0
USE
END WHEN
FOR i=m TO n
   LET p(i)=q(LBOUND(q)+i-m)
NEXT i
END SUB
 

戻る