十進BASIC互換性オプションの効果

書式文字の解釈

「書式文字に#を用いたとき,先行する空白列を生成しない」にチェックを入れると, JIS Full BASIC 10.4.4(4.2)(c)の規定中,「番号記号が用いられているときには先行の空白列が生成される」の規定を無視します。その後,数値が負であれば(4.4)で"-"を左に付加し,さらに(4.5)の規定にしたがって左に空白を補います。
したがって,#のみで生成した書式でも,負号が入る余地があれば,負数の出力ができます。

「書式文字に#を用いたとき,先行する空白列を生成する(JIS)」にチェックを入れると, JIS Full BASIC 10.4.4(4.2)(c)の規定通りに数値を書式化します。
たとえば,

10 PRINT USING "###":-1
20 END

を実行すると,(4.2)の段階で" 1"(空白2個と数字の1)になるので,(4.4)で先頭に負号を付加した段階で生成された文字列が書式項目よりも長くなってしまい,続行可能な例外状態になります。(10.4.6(4)を参照)

<Note>
正の数の出力は同じで,JIS互換を選ぶとき負数を出力すると必ず続行可能例外になることのみが異なる。だから,JIS互換を選ぶことに実用的価値はない(と思う)。

<補足>
JIS Full BASIC 規格 10.4.4(4.4)の参考に「ANSI X3.113では,例外状態のところが“-”となっているが,誤りであるので,TIBによって訂正した。」と書いてありますが,ANSIの記述のままでも結果として例外状態になるので,ANSIが誤りであるというのは誤りです。
なお,十進BASICは,表10.1の例外状態のところは“-”と書かれているものと解釈しています(つまり,ANSI準拠)。

DEF文の引数

Full BASICの関数定義の引数はすべて値渡しですが,十進BASICでは,処理速度を向上させる目的でDEF文の引数を参照渡しにしています。そのため,トリック的なプログラムを作ると,JISの規定と異なった結果になる可能性があります。その危険性を避けたいときは,「すべて値渡し(JIS)」を選んでください。
たとえば,次のプログラムは,オプションの選び方で結果が異なります。

10 FUNCTION h(x)
20    LET a=2
30    LET h=a*x
40 END FUNCTION
50 DEF f(x)=h(x)*x
60 LET a=1
70 PRINT f(a)
80 END

なお,将来的にはこのオプションを廃止して値渡しに一本化しますので,参照渡しであることに依存したコードは書かないでください。


戻る