はじめに
日本語プログラミング言語Mindの開発元@killyさんの御厚意により日本語プログラミング言語Mindのバージョン9βをご提供いただいております。前回の記事までは9βの言語拡張機能「評価」でTcl乱数関数を定義してみております。現状の9の仕様では言語拡張機能「評価」はguilib側に組み込まれているとのことで、わたしとしては若干想定外でした。今後の予定としてはtclのRDBM接続機能todbcとかでCGIのバックエンドとか構築できないかとか妄想しておりました。
昨年の3月ごろまではMind8のC言語ランタイムを拡張してMind単語を拡張するということもチャレンジしておりましたので、Mindの内部構造はおぼろげながらハンドインレベルである程度理解しております。
ということから、現在公開されている情報を元に最小Tcllibというのをビルドできないかというお題にチャレンジでしてみます。今回はC/C++2020のmake環境が整っていないので、Mind側だけでどこまでいけるかというのがお題です。
お題のソースコード
前々回の記事への@killyさんのコメントであきらかになった、「評価」の前段階のユーティリティ単語を下記のようにライブラリ化してみます。
tclライブラリ
コマンドラインは 文字列実体 長さ 2048桁。
コマンドラインにトークンを設定とは 処理単語 .S (トークン → ・)
(トークンを) コマンドラインに 入れ。
コマンドラインにトークンを追加とは 処理単語 .S (トークン → ・)
(トークンを) コマンドラインに 追加し。
コマンドラインにトークンを一文字追加とは 処理単語 .N (文字 → ・)
(トークンを) コマンドラインに 一文字追加し。
コマンドラインに空白とトークンを追加とは 処理単語 .S (トークン → ・)
半角空白を コマンドラインに 一文字追加し
(トークンを) コマンドラインに 追加し。
コマンドラインに空白と数値トークンを追加とは 処理単語 .N (数値 → ・)
_バッファは 文字列実体 長さ 24桁
半角空白を コマンドラインに 一文字追加し
(トークンを) _バッファをつかい 文字列変換し
コマンドラインに 追加し。
お題のソースコードのMind9βでのビルド
これをfileライブラリにリンクしてビルドしてみます。
C:\developments\vscode\mind9>mind tcllib file
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
C:\developments\vscode\mind9>
これはいけました!@killyさんが例示されたMind9のユーティリティ単語に
コマンドラインに空白と囲みトークンを追加
というのがあったのですが、これはかっこ関連の単語が未定義となりましたので、とりあず除外しました。Tclコマンドの「 { 」「 } 」はとりあえず文字列側で対応できそうなので、最小限のインターフェースをとれればよいという点ではマストではないかなと判定しました。
乱数ライブラリ
前回の記事で、とりあえず乱数ライブラリ部分だけの定義としたソースファイルです。前回と同じです。「捨て」てるのは手抜きです
疑似乱数とは 関数 小数出力 (・ → 小数)
※ 0.0以上~1.0未満 の 乱数を戻す
「expr { rand() }」を コマンドラインにトークンを設定し
コマンドラインを 評価した値を 数値変換・小数として
捨てる。
種子指定の疑似乱数とは 関数 整数入力 小数出力 (変数 → 小数)
※ シード値指定の0.0以上~1.0未満 の 乱数を戻す
種子は 変数
種子に 入れ
「expr { srand(」を コマンドラインにトークンを設定し
種子を 文字列変換し コマンドラインにトークンを追加し
「)}」を コマンドラインにトークンを追加し
コマンドラインを 評価した値を 数値変換・小数として
捨てる。
テスト用コード
前回のテストコードはGUIで書いていましたが、今回はコンソールベースです。
"randomtcl.src"を コンパイルする。
簡易小数表示とは (小数 → ・)
8桁で 小数形式で表示し 改行すること。
※ テスト用
メインとは
疑似乱数()を 簡易小数表示し
疑似乱数()を 簡易小数表示し
種子指定の疑似乱数(10)を 簡易小数表示し
種子指定の疑似乱数(10)を 簡易小数表示し
種子指定の疑似乱数(30)を 簡易小数表示すること。
お題のソースコードのMind9βでのビルド
これを先ほどビルドしたtcllibライブラリにリンクしてビルドしてみます。ポイントは標準fileライブラリがC言語定義された中核単語「評価」「評価した値」をインクルードしているかどうかです。
C:\developments\vscode\mind9>mind randomtcl3 tcllib
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
2 個のエラーが有ります。
残念!はやりだめでした
randomtcl3.src 5 行目でエラー。行内容は、
コマンドラインを 評価した値を 数値変換・小数として
要因1:"評価した値"は未定義の単語です。
randomtcl3.src 16 行目でエラー。行内容は、
コマンドラインを 評価した値を 数値変換・小数として
要因1:"評価した値"は未定義の単語です。
2 個のエラーが有ります。
今回は「評価」は使っていないので、「評価した値」で2か所未定義エラーとなっていますね。
評価は アセンブラ定義の処理単語。
評価した値は アセンブラ定義の処理単語。
ソースはmind2tcl.cとそのインクルードにあるみたいなので、makeしなおせる環境があればtcllib(最小限版)をビルド通過させることもできなくはなさそうですね。このあたりは開発元の@killyさんの企画しだいかと思いますが、Mind9.xとかでぜひご検討ください。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。まだほんのさわりの部分ですが、今年で生誕40周年を迎える日本語プログラミング言語Mind、ついに新バージョンがベールをぬぎはじめます!