まるで詩のような日本語で書いたプログラム（愛ではなくお酒に酔う版） - 実際に動きます

# はじめに

木村 明さん [^1] の傑作かつ芸術的な日本語プログラムに「ポエム（Poem）」があり[^2] まして、先日に日本語プログラミング言語Mind開発者の@killyさんにより[Qiitaに公開](https://qiita.com/killy/items/0b5eb530fdceebd8c03e)されて好評を博しています。

https://qiita.com/advent-calendar/2023/mind

# 経緯
ソースコードも完全な形で公開されていますので、動かしてみようかなと思いましたところ、Mind8のグラフィックス機能ライブラリはまだ公開されていないのでそのままではだいぶビルドエラーがでてしまいました。そこで、現状のMind8の標準ライブラリで動くよう、氏[^1] の傑作はそのままに、ビハインドの処理単語定義を調整してみました。木村さん、@killyさんごめんなさい。

# ソースコードと実行画面

ソースプログラム後半の見どころは以下の部分で、ほぼオリジナルと同じです。
「愛を　弄び　恋を　弄び　幸福を　弄ぶ」はすみません、デバッグ用に変数の動きをコンソールに出力するものです。通常時「弄ぶ」は「捨てる」で等価定義しています。
また、踊ったあとの「戸惑う」がテキストスクロールをスムーズにさせるために、少し追加されています。

```mind:poem2.src
～略～

メインは
　　愛は　夢　　恋は　夢　　幸福は　夢　　不幸は　夢
　　　　らんちき騒ぎのあとに
　　　　　　扉を開け
　　　　　　　２８日の　喜劇
		回数を　弄ぶ
　　　　　　　　明日から　３９５日　☆　愛に　酔う
　　　　　　　　　明日から　６３５日　☆　恋に　酔う
　　　　　　　　　　あさってから　７７日　☆　幸福に　酔う
　　　　　　　　　　 １日目から  ７日目まで　☆  着飾って
　　　　　　　　　　 　愛と　恋と  幸福の  タンゴを踊り　戸惑う
         			　愛を　弄び　恋を　弄び　幸福を　弄ぶ
　　　　　　　　　　幸福を　２つに　割って　不幸に　入れ
　　　　　　　　　２１０日目から　３３０日目まで　眠る
　　　　　　　　黒を　着飾って
　　　　　　　愛と　恋と　不幸の　ワルツを踊り　戸惑う
     			愛を　弄び　恋を　弄び　不幸を　弄ぶ
　　　　　　愛と　幸福と　昨日に　グッバイと　言って
　　　　　愛に　酔う
　　　　恋が　不幸を　引きよせる
　　　恋に　酔う
　　不幸と　明日に　グッバイして
　 不幸に　酔う
　 愛が  今日から　３９９日間の  悪夢　でなければ　もう一度　…
　 恋が  今日から　６３９日間の  悪夢　ならば
　　愛と　恋と　不幸の　タンゴを踊る　…
     		愛を　弄び　恋を　弄び　不幸を　弄ぶ
　　　恋に　幸福を　加えれば　恋に　酔う
　　　　恋が　今日から　６３９日間の　悪夢　でなければ　もう一度　…
　　　　　愛と　恋と　不幸の　タンゴを踊りつつ　戸惑う
     	　　愛を　弄び　恋を　弄び　不幸を　弄ぶ
　　　　　　繰り返しくりかえしくりかえし
　　　　　　　扉を閉める。
```
実行画面はこんな感じです。グラフィック機能はまだ公開されていないので、コンソールアプリケーションとして動くように修正されています。
<details><summary>実行画面</summary>

```
C:\pmind\sample>poem2
作： 木村　明 (1986)
Mind8
       ●   ●●●          ●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                           〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                    〇
   ● ●                  ●●●●●●●●●●●●●●●●●●●
   ●      ●●●●●●                  ●●●●●●●●●●●●●●●●●●●
        ●    ●●●●            ●●●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                      〇
    ●    ●●●●                ●●●●●●●●●●●●●●●●●
    ●    ●●●●                ●●●●●●●●●●●●●●●●●
       ●              ●●●●●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                      〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇              〇
      ●       ●●●●●●●            ●●●●●●●●●●●●●
      ●  ●●            ●●●●●●●●●●●●●
    ●             ●●●●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇   〇
      ●            ●●●●●●●●●●●●●
      ●            ●●●●●●●●●●●●●
 ●          ●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇              〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇
```
</details>

もうちょっとランダムな感じがでればよかったのですが、力不足でした。実行画面の出来は主題ではないので、目立たないよう詳細非表示で隠しています。

# 解説
オリジナルの下記の定義ヶ所に対しまして、等価定義対象のグラフィックス処理単語が未定義エラーとならないように少し書き加えました。

```mind:poem.src
タンゴを踊るは　　　　　円を塗ると　　　等価。
ワルツを踊るは　　　　　円弧をかくと　　等価。
```

もうちょっと詩的な雰囲気がほしいところですが、「酔う」という単語に対してお酒しか連想できませんでした。すみません。

```mind:poem2.src
～略～
買って来るとは　	割った余りと　	等価。
乾杯は　		複数空白表示と　等価。
返杯は　		表示と　	等価。
冷蔵庫にしまうは	一行表示と　	等価。
残りは			「●」を　返すこと。
別のは			「〇」を　返すこと。

円を塗るとは
    ビールは　夢
    日本酒は　夢
    ウィスキーは　夢
    
    ビールに　酔う
    日本酒に　酔う
    ウィスキーに　酔う
    ビールを　１０本　買って来て　ビールに　酔う
    日本酒を　８本　買って来て　日本酒に　酔う
    ウィスキーを　２０本　買って来て　ウィスキーに　酔う
    
    ビールで　乾杯
    残りを　返杯
    日本酒で　乾杯
    日本酒で　喜劇　残りを　返杯　繰り返しくりかえしくりかえし
    ウィスキーで　乾杯
    ウィスキーで　喜劇　残りを　返杯　繰り返しくりかえしくりかえし
    残りを　冷蔵庫にしまうこと。
円弧をかくとは
    チューハイは　夢
    ハイボールは　夢
    ワインは　夢
    
    チューハイに　酔う
    ハイボールに　酔う
    ワインに　酔う
    チューハイを　８０本　買って来て　チューハイに　酔う
    ハイボールを　３０本　買って来て　ハイボールに　酔う
    ワインを　３０本　買って来て　ワインに　酔う
    チューハイで　喜劇　別のを　返杯　繰り返しくりかえしくりかえし
    ハイボールで　乾杯
    ハイボールで　喜劇　別のを　返杯　繰り返しくりかえしくりかえし
    ワインで　乾杯
    別のを　冷蔵庫にしまうこと。
```

オリジナルの下記の等価定義をそのまま使っています。
```mind:poem.src
夢は　　　　　　　　　　変数と　　　　　等価。
酔うは　　　　　　　　　入れると　　　　等価。
喜劇は　　　　　　　　　回数指定と　　　等価。
```
## 参考情報
<details><summary>ソースコード全文</summary>

```mind:poem2.src
※タイトル　詩によるスマイルフェイス乱数表示プログラム
※　Version1.0(1986-03-07)
※　リンク　ALL
※　木村　明
※　修正：片桐　明(2023-09-20) Mind8 新版暫定 向けに修正
※　リンク　filew - guiLib - 9801Lib
※　修正：@mylifewithviolin(2023-11-23) Mind8向けに修正 スマイルフェイス->●〇
※　リンク　filew 

夢は　　　　　　　　　　変数と　　　　　等価。
酔うは　　　　　　　　　入れると　　　　等価。
喜劇は　　　　　　　　　回数指定と　　　等価。


描画色設定とは　		無処理。
角度設定とは　　		無処理。　
図形の重なりを最上位へとは	無処理。
黒とは				無処理。
　　
買って来るとは　	割った余りと　	等価。
乾杯は　		複数空白表示と　等価。
返杯は　		表示と　	等価。
冷蔵庫にしまうは	一行表示と　	等価。
残りは			「●」を　返すこと。
別のは			「〇」を　返すこと。

円を塗るとは
    ビールは　夢
    日本酒は　夢
    ウィスキーは　夢
    
    ビールに　酔う
    日本酒に　酔う
    ウィスキーに　酔う
    ビールを　１０本　買って来て　ビールに　酔う
    日本酒を　８本　買って来て　日本酒に　酔う
    ウィスキーを　２０本　買って来て　ウィスキーに　酔う
    
    ビールで　乾杯
    残りを　返杯
    日本酒で　乾杯
    日本酒で　喜劇　残りを　返杯　繰り返しくりかえしくりかえし
    ウィスキーで　乾杯
    ウィスキーで　喜劇　残りを　返杯　繰り返しくりかえしくりかえし
    残りを　冷蔵庫にしまうこと。
円弧をかくとは
    チューハイは　夢
    ハイボールは　夢
    ワインは　夢
    
    チューハイに　酔う
    ハイボールに　酔う
    ワインに　酔う
    チューハイを　８０本　買って来て　チューハイに　酔う
    ハイボールを　３０本　買って来て　ハイボールに　酔う
    ワインを　３０本　買って来て　ワインに　酔う
    チューハイで　喜劇　別のを　返杯　繰り返しくりかえしくりかえし
    ハイボールで　乾杯
    ハイボールで　喜劇　別のを　返杯　繰り返しくりかえしくりかえし
    ワインで　乾杯
    別のを　冷蔵庫にしまうこと。


着飾るは　　　　　　　　描画色設定と　　等価。
…は　　　　　　　　　　つぎと　　　　　等価。
眠りとは　　　　　　　　角度設定と　　　等価。


タンゴを踊るは　　　　　円を塗ると　　　等価。
ワルツを踊るは　　　　　円弧をかくと　　等価。
グッバイは　　　　　　　割ると　　　　　等価。
言うは　　　　　　　　　引くと　　　　　等価。
おまじないを言うは　　　無処理と　　　　等価。
戸惑うとは　　　　　　　３　十ミリ秒単位待すること。
弄ぶとは　　　　　　　　捨てると　　　　　等価。

明日は　５日。
あさっては　１０日。
昨日は　３日。
今日は　０日。

悪夢とは　範囲？と　等価。

きちがい星は　夢。

らんちき騒ぎとは　（・　→　・）
        ※－－－－－－－－－－※
        ※　乱数の種を初期化　※
        ※－－－－－－－－－－※
        日時を得て
　　　　日を　分けて　和む
　　　　きちがい星のうたに　酔う。

☆とは
　　　　生は　夢　　死は　夢　　生と　死に　酔う
　　　　死に　１日を　加え　生を　引き　死に　入れ
　　　　１０１日を　きちがい星に　掛け
　　　　１０００１日間　余を　きちがい星に　酔う
　　　　きちがい星と　死の　余を　生に　加え。

文字作画１は    変数。
文字作画２は    変数。

テキスト描画とは
                文言１は　　　　文字列定数　「作： 木村　明 (1986)」
                文言２は　　　　文字列定数　「Mind8」
	        
        文言１を　一行表示し
        文言２を　一行表示すること。

扉を開けるとは
        テキスト描画する。

扉を閉めるとは
        文字作画１を　図形の重なりを最上位へ
        文字作画２を　図形の重なりを最上位へ。

メインは
　　愛は　夢　　恋は　夢　　幸福は　夢　　不幸は　夢
　　　　らんちき騒ぎのあとに
　　　　　　扉を開け
　　　　　　　２８日の　喜劇
		回数を　弄ぶ
　　　　　　　　明日から　３９５日　☆　愛に　酔う
　　　　　　　　　明日から　６３５日　☆　恋に　酔う
　　　　　　　　　　あさってから　７７日　☆　幸福に　酔う
　　　　　　　　　　 １日目から  ７日目まで　☆  着飾って
　　　　　　　　　　 　愛と　恋と  幸福の  タンゴを踊り　戸惑う
     			　愛を　弄び　恋を　弄び　幸福を　弄ぶ
　　　　　　　　　　幸福を　２つに　割って　不幸に　入れ
　　　　　　　　　２１０日目から　３３０日目まで　眠る
　　　　　　　　黒を　着飾って
　　　　　　　愛と　恋と　不幸の　ワルツを踊り　戸惑う
     			愛を　弄び　恋を　弄び　不幸を　弄ぶ
　　　　　　愛と　幸福と　昨日に　グッバイと　言って
　　　　　愛に　酔う
　　　　恋が　不幸を　引きよせる
　　　恋に　酔う
　　不幸と　明日に　グッバイして
　 不幸に　酔う
　 愛が  今日から　３９９日間の  悪夢　でなければ　もう一度　…
　 恋が  今日から　６３９日間の  悪夢　ならば
　　愛と　恋と　不幸の　タンゴを踊る　…
     		愛を　弄び　恋を　弄び　不幸を　弄ぶ
　　　恋に　幸福を　加えれば　恋に　酔う
　　　　恋が　今日から　６３９日間の　悪夢　でなければ　もう一度　…
　　　　　愛と　恋と　不幸の　タンゴを踊りつつ　戸惑う
     	　　愛を　弄び　恋を　弄び　不幸を　弄ぶ
　　　　　　繰り返しくりかえしくりかえし
　　　　　　　扉を閉める。


```
</details>


[^1]: 当時、MSA（マイクロソフトウェア・アソシエイツ）で日本語プログラミング言語 Mind のプロモーションをしていた方。劇団 SO2 を主宰。

[^2]: Mind活用入門 - Let's日本語プログラミング、相原 寛、学研、1993