おーと・りすと・ちぇっかー
BASICで作られたプログラムはマシン語と違い、入力ミスをした場合にエラーが出るためにどこが間違っているか分かります。しかしながら、エラーの出ない入力ミスも多数存在します。例えば「1」と「I」を入力を間違えた場合を考えてみましょう。
(1) A=A+1 (2) A=A+I |
「BCS」の問題点の例
(注意)決して「BCS」がダメだと言っているのではなく、私の指向とかみ合わない部分があったというだけであり、アリスにもまた問題点は多くあります。詳しくは「アリスの特長と問題点」を参照してください。
《使用する前に》
まず、アリスをリスト通りに入力してください。
次に「RUN*ALICE」としてきちんと入力されているかどうかチェックしてください。画面左にチェックしている行番号が表示されていて、もしその行に入力ミスがあれば「ダメ」と表示されるのでリストをよく見て修正してください。もし入力ミスがなければ「カンペキネ!」と表示されます。
きちんとリストを入力したらRAMファイルにアスキーセーブしてください(61090行参照)。
《使用方法》
自分が作ったプログラムが完成したら投稿やアップロードする直前にアリスをMERGEでRAMファイルから読み込んで下さい。PFキーに登録しておくとよいでしょう(61100行参照)
アリスを読み込んだら「RUN*LOLI」としてください。そうするとチェックサムの作成を行います。作業している行が右に表示されていきます。
作成が終了したら「オワッタヨ!」と表示されます。そして、まだプログラムの修正をするかどうか聞いてくるので、このまま投稿するのであれば「N」を押してください。すると不要な行は自動的に削除され投稿するメインプログラムとアリスの本体部分だけが残ります。「N」を押した後、さらに修正したくなった場合はもう一度RAMファイルからアリスを読み込めば問題ありません。
今度はこの「アリス」が組み込まれ発表されたプログラムを入力する人は、すべて打ち込んだあとに先程書いたように「RUN*ALICE」を実行してください。この時に注意するのは、必ず入力した直後(メインプログラムを実行する前)にアリスを実行しなくてはいけないということです。だから、発表者は「必ず実行前にチェックしてください」と原稿中に明記しておいてください。
万一チェック前にメインプログラムを実行した場合は次のようにしてください。
(1)プログラムモードにする (2)カーソル下を押す (3)カーソル右を押す (4)[RETURN] |
60000 *ALICE CLS :CLEAR :OPEN BTEXT$ FOR INPUT AS #1:D$=INPUT $(&13,&1):DIM A(&2) 60010 A$="C/1TGbdVB2ROFc7/// 60020 FOR J=&1TO LEN A$:Y=ASC MID$ (A$,J,&1):FOR I=&TO &2:A(I)=ASC INPUT $(&1,&1):NEXT :A=&1,B=A(&)+A(&1),C=A(&)*256+A(&1):PRINT C;:IF Y<48LET D$=INPUT $(A(&2),1):GOTO "CK"ELSE FOR I=2TO A(&2):Z=ASC INPUT $(1,1),B=B+A*(Z-(Z>95))+1,A=3-A:NEXT 60030 D$=INPUT $(&1,&1):IF Y+(Y>95)<>(B-32768AND 63)+48BEEP 1:WAIT :PRINT "ダメ!";:WAIT &:M=&1 60040 "CK"PRINT :NEXT :IF M PRINT "オワリ"ELSE BEEP &3:PRINT "カンペキネ!" 60050 END 61000 *LOLI CLEAR :M$=CHR$ &+CHR$ &5,R$=CHR$ &D:KEY &,M$+CHR$ &1F+CHR$ &1C+R$+M$+"G.61010"+R$:END 61010 CLS :OPEN BTEXT$ FOR INPUT AS #1:D$=INPUT $(&13,&1),Z$="60010A$="+CHR$ &22:DIM A(&2) 61020 "ST"FOR I=&TO &2:A(I)=ASC INPUT $(&1,&1):NEXT :V=A(&),A=&1,B=V+A(&1),C=V*256+A(&1):IF C>60040THEN 61060ELSE PRINT C:FOR I=2TO A(&2):Z=ASC INPUT $(1,1),B=B+A*(Z-(Z>95))+1,A=3-A 61030 IF I=3IF Z=39OR C=60010LET X$="/",D$=INPUT $(A(&2)-3,&1):GOTO "PS" 61040 NEXT :S=B-32768AND 63,X$=CHR$ (48+S-(S>47)) 61050 "PS"Z$=Z$+X$,D$=INPUT $(&1,&1):GOTO "ST" 61060 KEY &,M$+"Z$"+R$+CHR$ &+CHR$ &AF+R$+M$+"G.61070"+R$:END 61070 CLS :BEEP &1:PRINT "オワッタヨ!":PRINT "プログラム ノ シュウセイヲ スル?(Y/N)" 61080 "KY"K$=INKEY$ :IF K$="Y"KEY &,M$+"L."+R$ ELSE IF K$="N"KEY &,M$+"DEL.60050-"+R$+M$+"B.1:CLS"+R$ ELSE "KY" 61090 'SAVE"E:ALICE",A 61100 'KEY6,"MERGE"+CHR$&22+"E:ALICE"+CHR$&D 61110 ' ALICE ver1.0 OCHAME soft 00/02/14 |
《「アリス」の特長》
まず、プログラムを発表する人はアリスを実行するだけで、自動的に必要なチェックサムがプログラムに書き込まれるのです。これはロリ(LOLI)という技術(「List Output&List Input」の略で要はプログラムリストを読み取る技術とプログラムを自己書き換えする技術を合わせたもので私が勝手に命名)が使用されています。リストをチェックする人もアリスを実行するだけで自動的にチェックが完了するので難しいことは何もありません。
アリスはメインプログラムにチェックするプログラムを組み込むことを前提に作られているのでBCSのようにプログラムがないからチェックが出来ないなんてことはありません。
また、アリスはチェックサムリストという方式ではなくチェックサムをメインプログラムの中に自動組み込みされますので、発表するリストはメインプログラムのみで済みます。
コラム チェックサムとは
チェックサムとは何かというとプログラムリストを符号化(符号化とは情報を符号で置き換えたもの)したもののことです。符号化というと良く使われているのがデータ圧縮のプログラムです。
《代表的な入力ミスの例》
以上のものについて確率上ほぼ確実に見付けることが可能になります。 |
BCSでは注釈文しかない行も正確に入力する必要がありましたが、アリスでは最初の「'」だけを入力すればあとはどのように入力してもよいのです。
注釈文自体がプログラムの動作に影響を与えることがないので正確に入力する必要性がないためにこのような機能をつけました。正確に入力しなくてもよいのならば、最初から入力しなくてもよいように思えますが、中には注釈文のある行にジャンプするようなプログラムがあるのために、単純にその行を削ることはできないのです。
BCSは行番号を間違えて入力していてもチェックすることができません。
(a) 10 PRINT A (b) 11 PRINT A |
BCSではユーザーが発表するプログラムまたは打ち込んだプログラムが「S1:TEXT.BAS」にあることを前提に処理が行われています。恐らく、ほとんどの人はこれで十分なのでしょうが、RAMカードの方をメインメモリにして使用している人やBTEST$を使用している人(私くらいか・・・(笑))は正常にチェックをすることができません。
したがって、アリスではチェックをするプログラムのファイル名を調べてからチェックを行っています。
単に「S1:TEXT.BAS」をBTEXT$に変えただけなので、ここでわざわざ書くようなことではないのですが・・・(笑)
これは、特長の(2)で「十分な精度」と書いたのに反する感じですね(笑)
確かにアリスは理論上約99.9%の精度を誇っているのですが、これはパターン分析によって弾き出された結果を元にしていることで実現しており、予測不可能なミスをしている場合にはチェックもれの可能性があるからです。
特にOMPデータなどのランダムに並んでいる文字を入力する場合には最悪の場合約98.4%(ミスが発見できない確率が64分の1)までチェック精度が落ちてしまいます。しかし、単純な入力ミス(単純でない入力ミスとは「A」を入力するつもりで「b」を入力するなど通常考えられないもの)の場合は精度は理論値に近くなりますので、それほど神経質になる必要はありません。しかし、とりあえず注意しておいた方がよいかもしれません。
というのも、1行あたりの文字数が50文字で2行あたり1つ(つまり100文字に1つ)の確率で入力ミスがあるという想定で理論値を計算しているのでランダムに並んだ文字列だとこれよりミスをする確率が高くなるために精度が落ちる(逆に言えば正確に入力すれば精度がアップする)のです。
確かに単純に精度から言えばBCSの方が高いですが、BCSは人間の目でチェックするという工程が入るためにミス1000回につき1回見落とすと考えれば精度はアリスと変わらなくなるかもしれません(苦しい言い訳・・・(笑))。
このアリスは全体で240行以下(目安として10〜15Kバイト)のプログラムでしか使用することができません。
これは、ベーマガなどの雑誌に投稿したり、ホームページなどでリストの形で発表するのには十分だと思われますが、不満に思われる人もいるかもしれません。
これは、チェックプログラムのサイズを優先したためなので、もし、多少サイズが大きくても構わないという人がおられましたらデラックスバージョン(?)を作ります。その場合は6ビットの符号化では精度が十分ではなくなる可能性があります(例えば、2000行、100Kバイトの巨大なプログラムを発表しそれを入力したときに1000個の間違いがあったら、期待値で言えばそのうち1つは見付け切れない)ので、2倍の12ビットにすることを考えています。それにより、単純計算で64倍精度がアップします。しかし、チェックサムデータの大きさが2倍になってしまいますが・・・。
チェックサムがある60010行はチェック機能が働かないため確実に正確に入力する必要があります。これは、完全自動化とリスト短縮のための制限で、これをなくすためにはチェックサムをチェックするルーチンを別に作る必要があり、サイズが大きくなってしまうためにこのバージョンでは見送ることになりました。もし、強い要望があれば何とかします。
プログラムリストを発表する側としても、やはり、入力する側の人のことも考えておいて欲しいですよね!このことは入力する側にたったことがある人なら誰でもあると思います。意味もなく長いプログラムリスト、延々と注釈文の無いプログラムリスト・・・、これらを打ち込んだあげくはエラーが出て実行不可能では「入力にかかった時間を返せ!!」と本当に言いたくなりますね。
この「アリス」を使用すれば、入力ミスがどの行にあるのか分かるためミスの発見が容易になります(エラーが発生した行に入力ミスがあるとは限らない!!)。もし、アリスが指摘した行に絶対入力ミスがないという場合は99.9%の確率で発表者側のミスと言えます。
ということで、まだいろいろ書き足りないものもありますが、皆さん、ぜひ「アリス」を使ってみてください。そして、ご意見・ご感想などがありましたら遠慮なく言ってください。
特殊コマンドも紹介!?アリスを128%使いこなしたい人に贈る!
「アリス」の裏技