はじめに
日本語プログラミング言語Mindの開発元@killyさんの御厚意により日本語プログラミング言語Mindのバージョン9βをご提供いただいたので、9βの言語拡張機能「評価」でTcl乱数関数を定義してみました。本記事はチャレンジャブルな内容で9βの本来のサポートレベルを超えた内容です。
前提条件
Windows11 Pro 22H2 22621.4169
mind version9-BETA-6
9βの言語拡張機能「評価」とは
@killyさんの下記の記事からの引用です。
「MindとTcl/Tkとの連携はこんな感じです」の節より
MndのプログラムとGUIエンジンであるTcl/Tkモジュールとのインターフェースについてお話します。
Mind記述アプリ
→Mind記述のMindランタイム
→C記述のMindランタイム(カーネル)
→DLL呼び出し→Tcl/Tkモジュールという手順でMindからTcl/Tkの呼び出しを行います。
イベントが発生したときは上記を逆にたどり、最終的にMind記述の処理単語が動いてイベント処理をおこなう形となります。
この節では具体的なMind記述アプリ側の記法についての例示はありませんが、その節の上の「GUI機能の追加」の節に下記の例示があります。
(Mind7)(古いMindです。生のTcl/Tkコードを書く個所があります)
メインとは
「button .b1 -text {これを押すと終了します} -command {mindcmd exit}」を 評価し
「pack .b1」を 評価する。
実際のソースコードではmindcmd exitの定義部分の記述もありますが、本記事はそこは重要ではないので割愛しています。上記の例示ソースコードの「評価」がMindからTclを呼び出すための単語となり、その直前の文字列がTclコマンドとなります。
参考
以下、このTclとのインターフェース単語を用いて、Tclの乱数関数のrand()、srand()を実行するサンプルコードを記述してみます。
rand()、srand()については下記の情報も参考にさせていだきました。
また、「評価」の実装上の注意事項はMind7マニュアルdoc\guiprog.docmを参考にしています。また、実際は値を返す単語の「評価した値」を使用しています。
お題のソースコード
下記のコードには誤りが含まれている場合があります。実行した結果はまだ値が正しくとれていません。
一般コマンド桁数は 数値 120桁。
キャンバスは ID。
キャンパス幅は 定数 800。
キャンパス高は 定数 400。
簡易小数表示とは (小数、変数 → ・)
_テキストIDは 図形ID
明朝10は 文字列定数 「{MSP 明朝} 10」
数字文字は 文字列
Y座標は 変数
Y座標に 入れ
5桁と 4桁で 文字列変換・小数形式し 数字文字に 入れ
キャンバスと 数字文字を 300 Y座標で 図形としてテキストのIDを取得し _テキストIDに 入れ
赤色を _テキストIDに 文字色を設定し
明朝10を _テキストIDに フォントを設定し
_テキストIDを 描画すること。
疑似乱数とは 関数 小数出力 (・ → 小数)
※ 0.0以上~1.0未満 の 乱数を戻す
_コマンドは 文字列実体情報
一般コマンド桁数で 文字列実体を獲得し _コマンドに 入れ
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
「expr { rand() }」を _コマンドに 文字列実体を入れ
_コマンドを 文字列実体を参照し 評価した値をつみ
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
_コマンドを 文字列実体を解放する。
種子指定の疑似乱数とは 関数 整数入力 小数出力 (変数 → 小数)
※ シード値指定の0.0以上~1.0未満 の 乱数を戻す
種子は 変数
_コマンドは 文字列実体情報
種子に 入れ
一般コマンド桁数で 文字列実体を獲得し _コマンドに 入れ
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
「expr { srand(」を _コマンドに 文字列実体を入れ
種子を 文字列変換し _コマンドに 追加し
「)}」を _コマンドに 追加し
_コマンドを 文字列実体を参照し 評価した値をつみ
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
_コマンドを 文字列実体を解放する。
※ テスト用
メインとは
メインウィンドウと キャンパス幅と キャンパス高と 白色で
キャンバスを立て キャンバスに 入れ
疑似乱数()を 10で 簡易小数表示し
疑似乱数()を 20で 簡易小数表示し
種子指定の疑似乱数(10)を 30で 簡易小数表示し
種子指定の疑似乱数(10)を 40で 簡易小数表示し
種子指定の疑似乱数(30)を 50で 簡易小数表示すること。
上記のソースコードはビルド成功します。guilibとのリンクが必要のため、テストコードの結果の出力はGUIウィンドウで展開するように書いています。
お題のソースコードのMind9βでのビルド
c:\developments\vscode\mind9>mind randomtcl guilib
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindexw.exe --> randomtcl.exe
Mind7同梱のtcllibは未サポートのようでした。
c:\developments\vscode\mind9>mind randomtcl tcllib
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 ..
コンパイルエラー:ライブラリファイル(.mco/sym)がオープンできません。
モジュール名:randomtcl.src
お題のMind9βでの実行の様子
残念ながらまだうまく動いておりません。
本件引き続き深堀して参ります。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。まだほんのさわりの部分ですが、今年で生誕40周年を迎える日本語プログラミング言語Mind、ついに新バージョンがベールをぬぎはじめます!