1
1

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乱数関数の定義を試みる2

Last updated at Posted at 2025-01-15

はじめに

日本語プログラミング言語Mindの開発元@killyさんの御厚意により日本語プログラミング言語Mindのバージョン9βをご提供いただいたので、前回の記事では9βの言語拡張機能「評価」でTcl乱数関数を定義してみましたところ@killyさんからよりMind9らしい書き方をご教授いただいたので本記事でそれを試してみました。本記事はマニュアル未記載な内容でMind9の本来のサポートレベルを超えた内容です。

前提条件

Windows11 Pro 22H2 22621.4169
mind version9-BETA-6 

9βの言語拡張機能「評価」とは

前回の記事への@killyさんのコメントからの引用です。

guilibに「評価」「評価した値」は定義されています。マニュアル非公開なのですが

  <Tcl/Tkスクリプト>を 評価する → ・

  <Tcl/Tkスクリプト>を 評価した値 → 値(文字列)

というスタック仕様です。お試しください。

そして、前回記事ではMind7の記法を倣って書いていたのですが、Mind9ではこう書いてくださいというサジェストをいただきました。

実験していただいたソースでは動的に文字列実体変数を獲得するとかされておられ、確かにMind7ではそのようにしている箇所が多かったのですが、Mind9では次の便利な単語群が定義されているのでご利用ください。(動的確保ではないので、2048桁を超える長さのスクリプトは扱えません)

  「command」を コマンドラインにトークンを設定し
  「abc」を コマンドラインに空白とトークンを追加し
  「def ghi」を コマンドラインに空白と囲みトークンを追加し
  123を コマンドラインに空白と数値トークンを追加し
  コマンドラインを 評価する

  生成されるコマンドライン
  → command abc {def ghi} 123

今回はこちらの記法で書いてみます。また、テスト用のコードとソースコードファイルを分離します。

お題のソースコード

ライブラリ

randomtcl.src
疑似乱数とは 関数 小数出力 (・ → 小数)
    ※ 0.0以上~1.0未満 の 乱数を戻す

    「expr { rand() }」を コマンドラインにトークンを設定し
     コマンドラインを 評価した値を 数値変換・小数として
     捨てる。

種子指定の疑似乱数とは 関数 整数入力 小数出力 (変数 → 小数)
    ※ シード値指定の0.0以上~1.0未満 の 乱数を戻す  
        種子は 変数

    種子に 入れ
    「expr { srand(」を コマンドラインにトークンを設定し
    種子を  文字列変換し コマンドラインにトークンを追加し
    「)}」を コマンドラインにトークンを追加し
     コマンドラインを 評価した値を 数値変換・小数として
    捨てる。

テスト用コード

randomtcl2.src
"randomtcl.src"を コンパイルする。

キャンバスは ID。
キャンパス幅は 定数 800。
キャンパス高は 定数 400。

簡易小数表示とは (小数、変数 → ・)

        _テキストIDは	図形ID
        明朝10は  文字列定数 「{MSP 明朝} 10」
        数字文字は 文字列
        Y座標は 変数
    
    Y座標に 入れ    
    5桁と 4桁で 文字列変換・小数形式し 数字文字に 入れ
    キャンバスと 数字文字を 300 Y座標で 図形としてテキストのIDを取得し	_テキストIDに 入れ
	赤色を		_テキストIDに 文字色を設定し
	明朝10を	_テキストIDに フォントを設定し
    _テキストIDを 描画すること。

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

    疑似乱数()を 10で 簡易小数表示し
    疑似乱数()を 20で 簡易小数表示し
    種子指定の疑似乱数(10)を 30で 簡易小数表示し
    種子指定の疑似乱数(10)を 40で 簡易小数表示し
    種子指定の疑似乱数(30)を 50で 簡易小数表示すること。

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

C:\developments\vscode\mind9>mind randomtcl2 guilib

日本語プログラミング言語 Mind Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\mind9-beta\mind9-beta\bin\mindexw.exe --> randomtcl2.exe

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

無事に動作しました。なんどか繰り返すと異なる値となることがわかります。
3行目と4行目は同じシード値による乱数です。

mind9tcl3.png

本件引き続き深堀して参ります。こちらに記載の

[使用例2]に対応した関数を用意したいと考えております。

% expr rand() * 100          ---(1)
75.90084829176816

% expr rand() * (5-2)+2      ---(2)
2.5687755898427103

% set x [expr rand() * 100] ---(3)
28.997123674022557

おわりに

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

参考

Tclのexprの下記の表記は下記のリンク先の情報からこのようにしております。

expr { rand() }

1
1
0

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?