Comments
Description
Transcript
Windows95 で動作する Full BASIC 言語処理系
Windows95 で動作する Full BASIC 言語処理系 文教大学教育学部 白石和夫 〒343-8511 越谷市南荻島 3337 TEL 0489-74-8811 e-mail [email protected] 概要 高等学校普通科における情報教育が,アルゴリズムの概念の習得や論理の組み立てな ど,数理的な能力の育成に重点をおくのであれば,JIS Full BASIC を用いることが検討 されるべきである。 Full BASIC は,比較的新しい時代に設計された構造化プログラミング言語で,論理的 な観点からみて洗練された制御構造を持つ。数値をすべて浮動小数点10進数として扱う ことや,グラフィックスの座標系として問題座標系を採用するなど,現実のコンピュー タから離れた抽象度の高い言語である。また,略語や記号の使用は抑制され,親しみや すく設計されている。そのため,アルゴリズムの概念の習得や数理的モデルの作成,あ るいはプログラミングにおける論理の組み立てや表現の学習に適した言語である。 筆者は,Full BASIC を用いる教育の実践研究を支援することを目的として,Windows 環境で動作する JIS Full BASIC 準拠の言語処理系「(仮称)十進 BASIC」を作成し,イ ンターネット等を利用して配布してきた。システム記述にはボーランド(現インプライズ) 社の Delphi を用いている。 (仮称)十進 BASIC を利用することで,JIS Full BASIC を利用する教育の研究が進む ことを期待する。 1.はじめに 筆者は, Windows 環境で動作する JIS Full 2.JIS Full BASIC の優位性 (1) 普通科高校における言語教育の意義 BASIC 準 拠 の 言 語 処 理 系 「 ( 仮 称 ) 十 進 高等学校普通科のカリキュラムの決定過程 BASIC」を作成し,インターネット等を利用 においてしばしば陥りやすい誤りとして,専 して配布してきた。高等学校普通科における 門家を育てるためのカリキュラムになりがち 情報教育がアルゴリズムの概念の習得や論理 なことが挙げられる。普通科におけるカリキ の組み立てなど,数理的な能力の育成に重点 ュラムは,卒業後,すぐ専門的な知識を生か をおくのであれば,Full BASIC の利用を考 して就職することを前提として組まれる職業 えるべきである。このソフトウェアは,Full 科におけるものとは異なる理念のもとに設計 BASIC を利用する教育の実践研究を支援する されるべきである。普通科では,プログラミ ことを目的として作成したものである。 ングの教育を行うとしても,それは,現実の プログラミングの場で必要となる雑多な知識 A Full BASIC language system which works on Windows95 K. Shiraishi Bunkyo University を習得させることではなく,アルゴリズムを であったり,数値計算や文字列処理であれば, 作成することの意義を理解させることや,自 Full BASIC は扱いやすい言語である。 身の手によるプログラミングを通して成就感 (3) Full BASIC の利点 を味合わせ,現在の学校教育に不足している Full BASIC は,比較的新しい時代に設計 創造的活動の場を作ることに的を絞ったもの された構造化プログラミング言語で,論理的 とすべきである。 な観点からみて洗練された制御構造を持つ。 (2) 教育用言語の選択 数値をすべて浮動小数点十進数として扱うこ 教育に利用する言語は,公的な規格のある とや,グラフィックスの座標系として問題座 ものが望ましいであろう。そうすると,候補 標系を採用するなど,現実のコンピュータか になるのは,BASIC,Pascal,C(C++を含む) ら離れた抽象度の高い言語である。文法は, である。Java は,現時点では公的な規格はな 単に構造化されているというだけでなく,コ いようであるが,その方向を目指すと思われ ンピュータの文法に精通しない初学者から見 るので候補に加えておくことは可能であろう。 て意味があいまいになる可能性のある文を生 それらのうち,C, Pascal, Java は,システ じることがないように工夫されている。また, ム記述を目的とした言語である。とりわけ, 略語や記号の使用は抑制され,親しみやすい C は,数値(整数),文字,真偽値というデー 言語である。そのため,アルゴリズムの概念 タの種類に関係なく,それらの内部表現に対 の習得や数理的モデルの作成,あるいはプロ して直接に操作することを旨とする言語であ グラミングにおける論理の組み立てや表現の る。コンピュータをハードウェアのレベルか 学習に適した言語だといえる。 ら順を追って指導していくのであれば,扱う (4) Full BASIC と Microsoft BASIC の相違 意義も生まれるであろうが,そのような前提 少ない記憶領域で動作するように独自に文 なしに扱って理解できるものではない。そし 法を改変したマイクロソフト系 BASIC が普 て,実際にプログラミングを行う段階に至れ 及してしまい,マイクロソフト系 BASIC が ば,==と=の違いのように数多くの落とし穴が BASIC だと思い込んでいる教員が学校現場で 待ち受けていることを忘れてはならない。 の教育を主導する現状となっている。しかし, BASIC の 最 新 の 規 格 は , 旧 規 格 の 基 本 この現状を是認すべきではない。 BASIC と区別するために Full BASIC と呼ば Quick BASIC や Visual BASIC などマイク れる。Full BASIC が C などのシステム記述 ロソフト社の比較的最近の BASIC や,コン 用言語と決定的に異なる点は,基本的なデー ピ ュ ー タ 教 育 開 発 セ ン タ ー(CEC) が N88- タ型が現実のハードウェアを反映したもので BASIC を土台として定めた CEC-BASIC’90 はないことである。Full BASIC が扱う数値 規格などは,構造化プログラミングのための は,通常,浮動小数点10進数のみであり,他 構文が追加されているため,Full BASIC に の言語に見られるような整数型は存在しない。 近い言語であるとみなされることがある。し また,Full BASIC ではコンピュータのメモ かし,教育用言語としてみた場合,Full BASIC リは操作の対象ではない。つまり,Full BASIC とマイクロソフト系 BASIC との間には無視 の操作対象は,コンピュータハードからみた できない相違がある。 場合,より抽象的な存在である実数(の10進表 最も顕著な相違は,数値の扱いである。Full 記に基づく近似モデル)と文字列に限定されて BASIC には数値の型の別は存在せず,数値は いる。そのため,利用目的がコンピュータハ すべて浮動小数点十進数として表現される。 ードウェアに依存しないアルゴリズムの記述 さらに,組込み関数も含め,数値演算の結果 の正確さも厳格に規定されている。 マイクロソフト系 BASIC の文法では,真 文法についてもかなり重要な相違がある。 偽値は数値の一部となっている。特に,比較 Full BASIC の文法の特徴は,正確な文法を 演算は,真のとき-1,偽のとき 0 となる二項 知らない初心者が,普通に言葉を話すときの 演算である。そのため,たとえば, ように文を組み立ていったとき,機械と人間 IF 1<A<3 THEN PRINT "Y" との間で異なった意味に解釈されてしまう可 は文法的に正しく,もし,A の値が 4 のとき 能性が生じないように設計されていることで これを実行すると,画面には Y が表示される。 ある。以下に,そのうちのいくつかを例示す しかし,Full BASIC では,真偽値を数値と る。 比較するような演算は文法誤りである。 マルチステートメントは,マイクロソフト BASIC に特徴的な文法である。コロンで 2 つ 3.Full BASIC 処理系の実装 の文を区切れば一行に書けると説明されるこ (1) (仮称)十進 BASIC の概要 とが多いが,そのように理解してしまうと落 Full BASIC を用いる教育の実践研究を支 とし穴にはまる危険がある。具体的には,先 援することを目的として,Windows 環境で動 頭の文が IF 文である場合に,2 つの文をコロ 作する JIS Full BASIC 準拠の処理系として ンで接続すると,意味が変化してしまう。Full (仮称)十進 BASIC を作成した。 BASIC では,この種の文法は採用されていな い。 (仮称)十進 BASIC の最新版は ver. 3.95 で あ る 。 こ の バ ー ジ ョ ン は , Full BASIC では,IF 行で,THEN の直後 Windows95/98/NT4.0 で動作する。JIS Full が行末であれば IF∼END IF 構文と解釈し, BASIC の中核機能単位の要求をほぼ満たし, そうでなければ単独の IF 文と解釈する。これ 図形機能単位の主要部分を実現している。ま は,マイクロソフト系の構造化 BASIC でも た,規格では参考として示されている単文字 同様であるが,Full BASIC がマイクロソフ 入力,モジュールの機能も,一部,実現して ト系 BASIC と異なるのは,THEN に続けて いる。 IF 文を書くことを許さないことである。その ため,Full BASIC では, IF … THEN IF … THEN ∼ ELSE ∼ の形のあいまい IF 文は生成されない。 現在,(仮称)十進 BASIC は,(株)ベクター から間借りした Web ページ[1]を利用して配 布している。 (2) Full BASIC 実装上のむずかしさ 文法の相違が,数値式の文法にも存在する。 さきに述べたように,Full BASIC の文法 マイクロソフト BASIC では,2^-3^4 のよう は,初心者の混乱を避けることを重視して設 に二項演算子の直後に負号を書くことが許さ 計されているために,言語処理系を実装しよ れる。マイクロソフト BASIC では,2^-3^4 は うとするソフトウェア技術者にとっては美し 2^(-3^4)の意味であるが,これは,通常,べ くないものである。もう少し具体的にいうと, き乗演算が左から順に実行され,2^3^4 は 類似の構造は存在するのに,それらにはわず (2^3)^4 の意味に解釈されることの例外とな かな相違があって容易には統合できないよう っていて,正確な文法を知らされていない, になっているのである。たとえば,Full BASIC あるいは,それを正しく理解させるのが困難 の手続きには,大別して,関数,副プログラ な初心者には混乱の原因となる。Full BASIC ム,絵の 3 種類がある。それぞれについて, では,このような書き方を許さない文法が採 内部手続きと外部手続きの別がある。内部関 用されている。 数には,DEF 文で定義される関数もある。こ れらは,見かけだけでなく,その動作に微妙 に丸めている。超越関数の計算は,基本的に な相違がある。たとえば,関数の引数はすべ は,Intel x87 系 FPU の拡張精度実数の形式 て値渡しであるが,副プログラムの引数は変 に変換し,FPU を利用して計算し,元の形式 数渡しになる場合がある。 に戻す方法で行っている。ただし,10 進数と 数値演算の正確さの規定は利用者にとって 2 進数の変換に伴う誤差が結果に影響しない は好都合であるが,反対に,言語を実装する ようにするための細工がある。たとえば,三 側には重い負担となる。三角関数の値の正確 角関数の計算では,およそ 30 桁程度の精度 さの要求は実引数が-2πから 2πの範囲の場 の十進演算ルーチンを用いて引数を調整して 合に限定されているが,逆にいうと,たとえ いる。 ば,正弦関数で実引数がπに近い数である場 (4) (仮称)十進 BASIC の非互換 合にも正確な値を返すことを要求しているこ とになる。そのため,内部では面倒な処理が 要求される結果になる。 (3) (仮称)十進 BASIC の内部構造 (仮称)十進 BASIC の現バージョンには JIS の規定に適合しない部分が残されている。 主な相違点を列挙すると,① chain 文, program 文で配列を引数にできない,② 関 (仮称)十進 BASIC の最新版は,インプライ 数や副プログラムの引数は 16 個以内に限る, ズ社の Delphi 4 を用いて記述されている。十 ③ extype 関数(例外状態種別番号)の値が規定 進演算ルーチンなど処理速度が重視される部 どおりにならないことがある,④ 例外処理区 分は組込みアセンブラで記述している。Delphi の内部で起きた続行可能例外を続行可能なも は,C++とよく似た構造をもつオブジェクト のとして扱う,⑤return 文の動作が JIS の規 志向 Pascal 言語である。(仮称)十進 BASIC 定と異なることがある,⑥ 図形 text 文の出 は,内部的には Delphi のオブジェクトを生成 力が問題座標によって歪まない,⑦初出の文 するコンパイラである。生成されたオブジェ 字列変数に部分文字列指定を書くと翻訳でき クトは自律的に動作する。しかし,独立して ない,などである。なお,①は chain 文自体 動作する EXE ファイルを生成する機能はな の必要性を感じないために手間を惜しんだ結 い。 果である。④は JIS の規定は合理的でないと (仮称)十進 BASIC の初期のバージョンは, 思われるので意図的にそのままにしてある。 PC-9801 MS-DOS で動作する BASIC として ⑤は,gosub 文をサブルーチンを呼び出す目 作成された。システム記述にはボーランド(現 的に使用している限りは問題にならない程度 インプライズ)社の Turbo Pascal 6.0 を用いて のものであり,JIS の規定が細かすぎるのが いる。その後,Delphi に移行して Windows3.1 原因である。⑥は重大な相違であるが,筆者 版を作成し,さらに,Delphi 2 を利用して が想定する使い方では,JIS の通りにすると Windows95 で動作する 32 ビット版を作成し かえって使いにくくなるので JIS に合わせる た。現在のバージョンは Delphi 4 で記述され の控えている。 ているが,Turbo Pascal で記述された時代の 名残も残されている。 JIS に適合していると主張することが困難 な個所もある。その多くは CPU や OS に依 十進演算ルーチンは 32 ビット整数演算を 存する個所であり,特に計算結果の正確さが もとにして 100000000 を基底とする多桁の演 そうである。なお,ver. 3.89 は,AMD K6 で 算のかたちで実現されている。数値を変数に 実行すると 10^98 の計算結果が正しい値にな 代入するときは,JIS の規定を満たすために らないなどの不具合を持っていた。これは, 有効数字の桁数がちょうど 15 桁となるよう 最新版では修正されているが,CPU や OS は, 事実上,ブラックボックスであるために期待 利用されている。 通りに動作するかどうか分からないという問 (2) Full BASIC 利用の実践研究推進のために (仮称)十進 BASIC に Mac 版がないのは弱 題がある。 点であるが,VirtualPC を利用して Mac で動 4.Full BASIC を利用する教育の可能 性 作させたという報告もある。少なくとも,Full (1) (仮称)十進 BASIC の利用例 するための環境は整ったといってよい。 BASIC による教育の実践研究を本格的に実施 しかし,Full BASIC を利用する実践研究 (仮称)十進 BASIC を利用する教育の実践報 告が Web 上に出現している。 は少ない。高校等で(仮称)十進 BASIC が利用 そのうち,最も早期に現れたのは,札幌稲 される機会もないわけではないが,その多く 北高校の早苗雅史氏による実践報告『10 進 は,マイクロソフト互換モードを利用したセ BASIC で描くグラフィックス』[2]と思われ ンター試験対策のための N88-BASIC 相当の る。このページでは,実際に高校生に指導し マイクロソフト BASIC によるプログラミン た経過や生徒の感想などを見ることができる。 グの指導である。マイクロソフト BASIC を また,同じ研究グループに属する札幌新川高 知らなければセンター試験に出題される問題 等学校 中村文則氏による解説 『やすい! は は理解できないという現実がある。また,Full やい! うまい! グラフィックス調理法』[3] BASIC 自体を知らない教員がほとんどであり, は Full BASIC の図形機能の特徴である図形 これらを変える努力が必要である。 また,Full BASIC を教育に利用するため 変換の機能を取り上げたものである。 立命館高校の文田氏は,実際に授業で使用 には,規格だけでは不十分な点も生じる。た したプリントを PDF 形式で公開している[4]。 とえば,行番号を省いたプログラムや漢字を 内容は,前半はプログラミングの基礎であり, 文字列定数や注釈文字列として書いたプログ 後半はフラクタル図形などとなっている。 ラムは規格外である。教育用として用意され 物理教育への利用を取り上げた Web ページ る Full BASIC 処理系はそのようなプログラ として,茨城県立岩井高校の入江氏による実 ムも扱えるべきであることを明示する必要が 践報告がある[5]。関数のグラフや曲線が簡単 あるだろう。細かいことであるが,JIS には に描けることを利用した授業が報告されてい 明確でない点や誤りと思われる記述も散見さ る。また,新居浜工業高専の上出拓郎氏の『十 れるから,それらの解釈も確定しておく必要 進 BASIC による自動制御の教材』[6]でも, がある。その上で,(仮称)十進 BASIC よりさ 同様に,計算結果が簡単に図にできることが らに進歩した処理系の出現を促したい。 References 1) http://www.vector.co.jp/authors/VA008683/ 2) http://www.nikonet.or.jp/spring/10b_grp/10b_grp.htm 3) http://www.nikonet.or.jp/spring/10basic/10basic.html 4) http://www.ritsumei.ac.jp/fkc/~fumita/semi.html 5) http://masakado.iwai-hs.iwai.ibaraki.jp/~irie/ 6) http://user.shikoku.ne.jp/uedetak/