1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-01-13

はじめに

日本語プログラミング言語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コードを書く個所があります)

hellowin.src
メインとは
	「button .b1 -text {これを押すと終了します} -command {mindcmd exit}」を 評価し
	「pack .b1」を 評価する。

実際のソースコードではmindcmd exitの定義部分の記述もありますが、本記事はそこは重要ではないので割愛しています。上記の例示ソースコードの「評価」がMindからTclを呼び出すための単語となり、その直前の文字列がTclコマンドとなります。

参考

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

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

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

お題のソースコード

下記のコードには誤りが含まれている場合があります。実行した結果はまだ値が正しくとれていません。

randomtcl.src

一般コマンド桁数は 数値 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βでの実行の様子

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

mind9tcl1.png

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

おわりに

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

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?