日本語プログラミング言語Mindのバージョン９βでTcl乱数関数の定義を試みる

# はじめに
日本語プログラミング言語Mindの開発元@killyさんの御厚意により日本語プログラミング言語Mindのバージョン９βをご提供いただいたので、９βの言語拡張機能「評価」でTcl乱数関数を定義してみました。本記事はチャレンジャブルな内容で９βの本来のサポートレベルを超えた内容です。

# 前提条件
Windows11 Pro 22H2 22621.4169
mind version9-BETA-6　

# ９βの言語拡張機能「評価」とは
@killyさんの下記の記事からの引用です。

https://qiita.com/killy/items/8a4f8773dbff69eb62c4

「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コードを書く個所があります）
```mind:hellowin.src
メインとは
	「button .b1 -text {これを押すと終了します} -command {mindcmd exit}」を　評価し
	「pack .b1」を　評価する。
```
実際のソースコードではmindcmd exitの定義部分の記述もありますが、本記事はそこは重要ではないので割愛しています。上記の例示ソースコードの「評価」がMindからTclを呼び出すための単語となり、その直前の文字列がTclコマンドとなります。

# 参考
以下、このTclとのインターフェース単語を用いて、Tclの乱数関数のrand()、srand()を実行するサンプルコードを記述してみます。

https://wiki.tcl-lang.org/page/rand

https://wiki.tcl-lang.org/page/srand

https://wiki.tcl-lang.org/page/random

rand()、srand()については下記の情報も参考にさせていだきました。

https://blog.it-see.net/it-dokata/tcl-tk/mathematical-function/#toc8

また、「評価」の実装上の注意事項はMind7マニュアルdoc\guiprog.docmを参考にしています。また、実際は値を返す単語の「評価した値」を使用しています。

# お題のソースコード
下記のコードには誤りが含まれている場合があります。実行した結果はまだ値が正しくとれていません。
```mind:randomtcl.src

一般コマンド桁数は　数値　１２０桁。

キャンバスは　ＩＤ。
キャンパス幅は　定数　８００。
キャンパス高は　定数　４００。

簡易小数表示とは　（小数、変数　→　・）

        ＿テキストＩＤは	図形ＩＤ
        明朝１０は　　文字列定数　「{ＭＳＰ 明朝} 10」
        数字文字は　文字列
        Y座標は　変数
    
    Y座標に　入れ    
    ５桁と　４桁で　文字列変換・小数形式し　数字文字に　入れ
    キャンバスと　数字文字を　300 Y座標で　図形としてテキストのＩＤを取得し	＿テキストＩＤに　入れ
	赤色を		＿テキストＩＤに　文字色を設定し
	明朝１０を	＿テキストＩＤに　フォントを設定し
    ＿テキストＩＤを　描画すること。

疑似乱数とは　関数　小数出力 （・ → 小数）
    ※ 0.0以上～1.0未満 の 乱数を戻す  
    ＿コマンドは　　文字列実体情報

    一般コマンド桁数で　文字列実体を獲得し　＿コマンドに　入れ
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    「expr { rand() }」を ＿コマンドに　文字列実体を入れ
    ＿コマンドを　文字列実体を参照し　評価した値をつみ
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    ＿コマンドを　文字列実体を解放する。

種子指定の疑似乱数とは　関数　整数入力　小数出力 （変数 → 小数）
    ※ シード値指定の0.0以上～1.0未満 の 乱数を戻す  
        種子は　変数
        ＿コマンドは　　文字列実体情報

    種子に　入れ
    一般コマンド桁数で　文字列実体を獲得し　＿コマンドに　入れ
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    「expr { srand(」を　＿コマンドに　文字列実体を入れ
    種子を  文字列変換し　＿コマンドに　追加し
    「)}」を　＿コマンドに　追加し
    ＿コマンドを　文字列実体を参照し　評価した値をつみ
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    ＿コマンドを　文字列実体を解放する。

    ※ テスト用
メインとは
    メインウィンドウと　キャンパス幅と　キャンパス高と　白色で
    　　　　　　　　　　　　　　キャンバスを立て　キャンバスに　入れ

    疑似乱数()を 10で　簡易小数表示し
    疑似乱数()を　20で　簡易小数表示し
    種子指定の疑似乱数(１０)を　30で 簡易小数表示し
    種子指定の疑似乱数(１０)を　40で 簡易小数表示し
    種子指定の疑似乱数(３０)を　50で 簡易小数表示すること。
```
上記のソースコードはビルド成功します。guilibとのリンクが必要のため、テストコードの結果の出力はGUIウィンドウで展開するように書いています。

# お題のソースコードのMind9βでのビルド

```cmd:
c:\developments\vscode\mind9>mind randomtcl guilib

日本語プログラミング言語 Ｍｉｎｄ Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindexw.exe --> randomtcl.exe
```
Mind7同梱のtcllibは未サポートのようでした。

```cmd:
c:\developments\vscode\mind9>mind randomtcl tcllib

日本語プログラミング言語 Ｍｉｎｄ Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 ..
コンパイルエラー：ライブラリファイル(.mco/sym)がオープンできません。
　　モジュール名：randomtcl.src
```

# お題のMind9βでの実行の様子

残念ながらまだうまく動いておりません。

![mind9tcl1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118036/25695535-1a2a-707c-04d7-458121b677b3.png)

本件引き続き深堀して参ります。

# おわりに
いかがでしたでしょうか？なにかの参考になれば幸いです。まだほんのさわりの部分ですが、今年で生誕４０周年を迎える日本語プログラミング言語Mind、ついに新バージョンがベールをぬぎはじめます！