LoginSignup
4
2

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

Last updated at Posted at 2023-11-23

はじめに

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

経緯

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

ソースコードと実行画面

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

poem2.src
~略~

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

実行画面はこんな感じです。グラフィック機能はまだ公開されていないので、コンソールアプリケーションとして動くように修正されています。

実行画面
C:\pmind\sample>poem2
作: 木村 明 (1986)
Mind8
       ●   ●●●          ●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                           〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                    〇
   ● ●                  ●●●●●●●●●●●●●●●●●●●
   ●      ●●●●●●                  ●●●●●●●●●●●●●●●●●●●
        ●    ●●●●            ●●●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                      〇
    ●    ●●●●                ●●●●●●●●●●●●●●●●●
    ●    ●●●●                ●●●●●●●●●●●●●●●●●
       ●              ●●●●●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                      〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇              〇
      ●       ●●●●●●●            ●●●●●●●●●●●●●
      ●  ●●            ●●●●●●●●●●●●●
    ●             ●●●●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇                〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇   〇
      ●            ●●●●●●●●●●●●●
      ●            ●●●●●●●●●●●●●
 ●          ●●●●●●●●●●●
〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇              〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇

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

解説

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

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

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

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

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

オリジナルの下記の等価定義をそのまま使っています。

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

参考情報

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

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


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

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


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


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

明日は 5日。
あさっては 10日。
昨日は 3日。
今日は 0日。

悪夢とは 範囲?と 等価。

きちがい星は 夢。

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

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

文字作画1は    変数。
文字作画2は    変数。

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

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

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

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


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

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

4
2
4

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
4
2