芝村裕吏さんの『関数電卓がすごい』を読んでいたら、FORTHを無性に触りたくなってしまった。
その昔、マイコン(現パソコン)で遊んでいた私はBASICに飽きてきて、もっと別の言語が触りたくなっていました。1981年にソフトバンク社が「ソフトウェアの流通革命」を起こすまでは、ソフトといえば、当時の数少ないマイコンショップにカセットテープに入れられたプログラムが数種類置いてあるだけでした。
当時の月刊ASCIIに、Tiny Pascal などの小規模の言語が発表されていました。その中で特に注目したのが、FORTHでした。非常にコンパクトな言語で、カセットテープで購入することもできたと思いますが、雑誌からマイコンへの入力した気がします。
手に入る情報は少ない時代でしたが、FORTH処理系を自分でいろいろ触って楽しみました。
現代はネットで様々な情報をすぐに手に入れることができるようになりましたが、FORTHに関する情報は非常に少ないです。ですから、これから作るものは、わずかな資料と記憶を頼りに作っていきます。確か、実家にFORTHの入門書が1冊あったと思うので、そのうち取りに行きたいと思っています。
自作FORTHは何がうれしいのか
今回、最初にやりたかったのは、三角関数や指数関数を使った電卓的な計算です。逆ポーランドという、ちょっと変わった計算方法ですが、慣れれば電卓のボタンポチポチするより、キーボードでササッと書いてポンと計算できたりします。
その他に、コマンドをC#レベルで書いて拡張していけば、コマンドを打ち込むだけでちょいと複雑な処理ができます。FORTH上でコマンドを組み合わせて処理することもできるので、ちょっとしたRPAができちゃうわけです。
基本形の作成
1からアプリ作るのはとても大変です。処理の分け方とか、変数の使い方とか、とりあえず動くまでが苦行になります。なので、そこはサクッとChatGPTに丸投げしてみます。
c#でforth処理系を作成
と送信してやれば、以下のような構成でコードを作成してくれました。
プロジェクト構成
- Stack: 数字以外の型も保存可能なスタック
- Interpreter: Forthのコマンドを解釈して実行する
- Compiler: Forthのソースコードをコンパイルする
- Basic Words: Forthの基本的なワード(コマンド)
それをコピペすると、たぶん一応動くものが出来上がります。
エラーが表示される場合は、その内容をChatGPTに伝えると、修正してくれることもあります。
バージョンアップ
ChatGPTが作ったコードに入っているワード(FORTHのコマンド)では不十分なので、自分で追加していきます。
しかし、if/else/then や、do/loop, begin/until, while/repeat のような制御に関するものは、ChatGPTにお願いして組み込んでもらったほうが早いです。
エラー対応
どうしても、エラーが発生します。
また、処理の中身を抜かしてくることもあります。
まるで、こちらが動作確認をサボっていないか抜き打ちテストするように。
ChatGPTに修正してもらうには、丁寧に問題点と修正方法を説明してあげないと、修正しましたと言いながら、治ってなかったりします。
どうしても直してもらえない場合は、自分でデバッグしてみましょう。
まとめ
非常に簡単なプログラムや、ありふれたプログラムでない限り、コードを一切読まないで完成させることは難しいようです。追加注文を繰り返していくうちに、問題点が解決できなくなってしまいます。
また、自分で書き込んだコードが増えてくると、注文のたびにすべてのコードが表示されていては修正箇所を探すのは大変です。途中からは修正した関数のみ表示させ、部分修正を行う方法がいいと思います。
この方法で、まだバグや仕様の不足ありますが、動作する forth_mini アプリを作りました。
登録されているワードは、words
コマンドで表示できます。