はじめに
木村 明さん 1 の傑作かつ芸術的な日本語プログラムに「ポエム(Poem)」があり2 まして、過日に日本語プログラミング言語Mind開発者の@killyさんによりQiitaに公開されて好評を博しています。
経緯
おととしとなりますが、本体ソースコードは完全な形で公開されていますので、動かしてみようかなと思いましたところ、Mindのグラフィックス機能はMind9まで公開されていないのでそのままではだいぶビルドエラーがでてしまいました。そこで、現状のMind8の標準ライブラリで動くよう、氏1 の傑作詩の本文はそのままに、ビハインドの処理単語定義を調整してみましたのが下記のバージョンでした。ただし、こちらの実行結果はいまひとつ残念な感じにとどまっておりました。
そして先日、日本語プログラミング言語Mindの開発元@killyさんの御厚意により日本語プログラミング言語Mindのバージョン9βをご提供いただいたので、そのグラフィックス機能のお試しを兼ねてこちらのソースをキャンバス機能で動くように調整してみました。
前提条件
Windows11 Pro 22H2 22621.4169
mind version9-BETA-6
オリジナルのpoem.srcをMind9β6でビルドしてみる
念のため、オリジナルのpoem.srcをMind9β6でビルドしてみました。Mind9βで追加されたguilibを強引にリンクします。こちらは想定どおり相応の数のビルドエラーで出ます。あくまで参考実行です。もしかしたら非公開の9801libを介せばいけるのかもしれません。
C:\developments\vscode\mind9>mind poem guilib
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
20 個のエラーが有ります。
Mind8コンソール版のpoem2.srcをMind9β6でビルドしてみる
つづいて Mind8コンソール版のpoem2.srcをMind9β6でビルドしてみました。まずは従来どおりfileライブラリとのリンクの場合です。
C:\developments\vscode\mind9>mind poem2 file
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> poem2.exe
こちらは問題なくビルド通過しました。続いて、念のため今回のお試しターゲットのguilibをリンクします。下位互換でFileライブラリしか使用していないので、ビルドは通過する想定でした。
C:\developments\vscode\mind9>mind poem2 guilib
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
2 個のエラーが有ります。
おおっエラーが出てしまいました。どこだろうとpoem2.infを開いてみますと...
poem2.src 17 行目でエラー。行内容は、
図形の重なりを最上位へとは 無処理。
要因1:"図形の重なりを最上位"は重複定義です(guilibで定義済み)。
poem2.src 77 行目でエラー。行内容は、
戸惑うとは 3 十ミリ秒単位待すること。
要因1:"十ミリ秒単位待"は未定義の単語です。
2 個のエラーが有ります。
1点目はなっとくでなるほどなのですが、2点目はちょっと意外でした。ctimerに定義されている下記の処理待ち単語に変更してみても同様でしたので、今回はディレイ単語は未使用です。
百ミリ秒待ちとは 1だけ 百ミリ秒単位待つこと。
一秒待つとは 10だけ 百ミリ秒単位待つこと。
キャンバス版のpoem4.srcをMind9β6でビルドしてみる
Mind9のグラフィックス機能のキャンバスを試しに実装したpoem4.srcをMind9β6でビルドしてみました。poem3.srcで書いていましたが諸般の事情でpoem4.srcとなっております。コードは追ってご説明いたします。
C:\developments\vscode\mind9>mind poem4 guilib
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindexw.exe --> poem4.exe
poem4.src無事にビルド通過しました。では続いて実行してみます。
キャンバス版のpoem4.srcを実行
諸般の事情で下図のようなモノクロラインアート風の雰囲気になってしまいました。ディレイはかからないので一瞬で描画されます。
解説
「円を塗る」と「円弧をかく」は下記のように記述しました。
円を塗るとは
_円IDは 希望
ビールは 夢
日本酒は 夢
ウィスキーは 夢
日本酒に 酔う
ビールに 酔う
ウィスキーに 酔う
ビールを 900本 買って来て ビールに 酔う
日本酒を 10杯 掛けて 480本 買って来て 日本酒に 酔う
2杯ほど ウィスキーに 酔う
御つまみと ビールと 日本酒と ウィスキーで 円のIDを取得し _円IDに 入れ
白色を _円IDに 満たす色を設定し
_円IDを 描画すること。
円弧をかくとは
_円弧IDは 希望
チューハイは 夢
ハイボールは 夢
ワインは 夢
チューハイに 酔う
ハイボールに 酔う
ワインに 酔う
チューハイを 800本 買って来て 400本 加えて チューハイに 酔う
ハイボールを 400本 買って来て ハイボールに 酔う
5杯ほど ワインに 酔う
御つまみと ワインと ハイボールと チューハイで 円弧のIDを取得し _円弧IDに 入れ
0と 359で _円弧IDに 開始・描画角度を設定し
円弧単独で _円弧IDに 円弧の種類を設定
白色を _円弧IDに 線の色を設定し
_円弧IDを 描画すること。
一部の単語はMind9のグラフィックス単語のままですが、「希望」と「御つまみ」は下記の定義となっております。「御つまみ」はサンプルコードでは「キャンバス」とされている場合が多いようです。
希望は 図形IDと 等価。
御つまみは ID。
円弧は円の着色無の線色ありでも描けるのかもしれませんが、まだよくわかっておりません。
おわりに
いかがでしたでしょうか?まだほんのさわりの部分ですが、今年で生誕40周年を迎える日本語プログラミング言語Mind、ついに新バージョンがベールをぬぎはじめます!
参考情報
ソースコード全文
※タイトル 詩によるスマイルフェイス乱数表示プログラム
※ Version1.0(1986-03-07)
※ リンク ALL
※ 木村 明
※ 修正:片桐 明(2023-09-20) Mind8 新版暫定 向けに修正
※ リンク filew - guiLib - 9801Lib
※ 修正:@mylifewithviolin(2023-11-23) Mind8向けに修正 スマイルフェイス->●〇
※ リンク filew
※ 修正:@mylifewithviolin(2025-01-11) Mind9β向けに修正
※ リンク filew - guiLib
夢は 変数と 等価。
酔うは 入れると 等価。
喜劇は 回数指定と 等価。
希望は 図形IDと 等価。
御つまみは ID。
※図形の重なりを最上位へとは 無処理。Mind9βguilibで定義済
黒とは 無処理。
買って来るとは 割った余りと 等価。
テキスト描画とは
文言1は 文字列定数 「原詩作: 木村 明 (1986)」
文言2は 文字列定数 「Mind9(β6) + guiLib(β6)」
_テキストIDは 希望
明朝20は 文字列定数 「{MSP 明朝} 10」
御つまみと 文言1を 700 10で 図形としてテキストのIDを取得し _テキストIDに 入れ
白色を _テキストIDに 文字色を設定し
明朝20を _テキストIDに フォントを設定し
_テキストIDを 描画し
御つまみと 文言2を 700 30で 図形としてテキストのIDを取得し _テキストIDに 入れ
白色を _テキストIDに 文字色を設定し
明朝20を _テキストIDに フォントを設定し
_テキストIDを 描画すること。
円を塗るとは
_円IDは 希望
ビールは 夢
日本酒は 夢
ウィスキーは 夢
日本酒に 酔う
ビールに 酔う
ウィスキーに 酔う
ビールを 900本 買って来て ビールに 酔う
日本酒を 10杯 掛けて 480本 買って来て 日本酒に 酔う
2杯ほど ウィスキーに 酔う
御つまみと ビールと 日本酒と ウィスキーで 円のIDを取得し _円IDに 入れ
白色を _円IDに 満たす色を設定し
_円IDを 描画すること。
円弧をかくとは
_円弧IDは 希望
チューハイは 夢
ハイボールは 夢
ワインは 夢
チューハイに 酔う
ハイボールに 酔う
ワインに 酔う
チューハイを 800本 買って来て 400本 加えて チューハイに 酔う
ハイボールを 400本 買って来て ハイボールに 酔う
5杯ほど ワインに 酔う
御つまみと ワインと ハイボールと チューハイで 円弧のIDを取得し _円弧IDに 入れ
0と 359で _円弧IDに 開始・描画角度を設定し
円弧単独で _円弧IDに 円弧の種類を設定
白色を _円弧IDに 線の色を設定し
_円弧IDを 描画すること。
着飾るは 捨てると 等価。 ※描画色設定と 等価。
…は つぎと 等価。
眠りとは 捨てると 等価。 ※角度設定と 等価。
タンゴを踊るは 円を塗ると 等価。
ワルツを踊るは 円弧をかくと 等価。
グッバイは 割ると 等価。
言うは 引くと 等価。
おまじないを言うは 無処理と 等価。
戸惑うとは 80ミリで 遅延。 ※guilibリンクすると:"十ミリ秒単位待"は未定義の単語です。filewはOK
弄ぶとは 捨てると 等価。
明日は 5日。
あさっては 10日。
昨日は 3日。
今日は 0日。
悪夢とは 範囲?と 等価。
くるった星は 夢。
らんちき騒ぎとは (・ → ・)
※----------※
※ 乱数の種を初期化 ※
※----------※
日時を得て
日を 分けて 和む
くるった星のうたに 酔う。
☆とは
生は 夢 死は 夢 生と 死に 酔う
死に 1日を 加え 生を 引き 死に 入れ
101日を くるった星に 掛け
10001日間 余を くるった星に 酔う
くるった星と 死の 余を 生に 加え。
※文字作画1は 変数。
※文字作画2は 変数。
扉を開けるとは
メインウィンドウと 800と 480と 黒色で
キャンバスを立て 御つまみに 入れ
テキスト描画する。
扉を閉めるとは 無処理。
※ 文字作画1を 図形の重なりを最上位へ
※ 文字作画2を 図形の重なりを最上位へ。
メインは
愛は 夢 恋は 夢 幸福は 夢 不幸は 夢
らんちき騒ぎのあとに
扉を開け
28日の 喜劇
明日から 395日 ☆ 愛に 酔う
明日から 635日 ☆ 恋に 酔う
あさってから 77日 ☆ 幸福に 酔う
1日目から 7日目まで ☆ 着飾って
愛と 恋と 幸福の タンゴを踊り 戸惑う
愛を 弄び 恋を 弄び 幸福を 弄ぶ
幸福を 2つに 割って 不幸に 入れ
210日目から 330日目まで 眠る
黒を 着飾って
愛と 恋と 不幸の ワルツを踊り 戸惑う
愛を 弄び 恋を 弄び 不幸を 弄ぶ
愛と 幸福と 昨日に グッバイと 言って
愛に 酔う
恋が 不幸を 引きよせる
恋に 酔う
不幸と 明日に グッバイして
不幸に 酔う
愛が 今日から 399日間の 悪夢 でなければ もう一度 …
恋が 今日から 639日間の 悪夢 ならば
愛と 恋と 不幸の タンゴを踊る …
愛を 弄び 恋を 弄び 不幸を 弄ぶ
恋に 幸福を 加えれば 恋に 酔う
恋が 今日から 639日間の 悪夢 でなければ もう一度 …
愛と 恋と 不幸の タンゴを踊りつつ 戸惑う
愛を 弄び 恋を 弄び 不幸を 弄ぶ
繰り返しくりかえしくりかえし
扉を閉める。
追記
開発元の@killyさんよりguilibリンクした場合はCUI用の「待つ」系単語は未定義となりGUI用の「遅延」のご案内をいただきましたので、下記のヶ所「無処理」から「80ミリで 遅延」に書き換えてみました。
戸惑うとは 80ミリで 遅延。 ※guilibリンクすると:"十ミリ秒単位待"は未定義の単語です。filewはOK
遅延版のpoem4.srcを実行
上記の「戸惑う」ありの場合の実行状態です。