日本語プログラミング言語Mindの小技 「空白を満たす」～文字列に右寄せで空白を満たす？～

# はじめに
日本語プログラミング言語Mindの小技「空白を満たす」について説明したいと思います。

# 対象読者
日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方

# この小技に関連するMind言語マニュアル

この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載があります。

７ 文字列操作
└空白を満たす

>構文＝　＜文字列実体変数＞に　空白を満たす　→　・
>
>　注　・副作用を受ける文字列情報変数または文字列実体変数の明示が必要。
　　　・その変数名に送り仮名「に」が必須

>　文字列実体変数の空き領域（左側および右側）に半角空白文字を満たす機能である。結果として、その文字列実体の長さ一杯に文字が埋まることになる。

本機能（本記事）は、下記のバージョンに対応しています。Mind８のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。

# 対応バージョン
■Mind７　■Mind８　■Mind９
■Windows版　□Linux版

# 小技の解説
この小技はちょっと日本語プログラミング言語Mind独特の便利機能です。まず、この小技を説明するには、Mindの文字列型について少し触れる必要があります。

## Mindの文字列変数型
・文字列情報変数型
・文字列実体変数型

Mindの文字列変数型には文字列情報変数型と文字列実体変数型の２つがあります。「文字列」という装飾をとると、「情報変数」型と「実体変数」型と含蓄のある表現ですね。

両者の違いにはいろいろございまして、また別の「小技」シリーズで解説したいところですが、またはこの４０周年記念プロジェクトにのっかってくださった別のユーザーさんが解説してくれるかもしれませんが、ざっくりここでは前者は可変長文字列の参照っぽい型で後者は固定長の実サイズを持つ型としておきます。

そして、今回の小技の「空白を満たす」は、この後者の文字列実体変数型向けの機能です。この文字列実体変数向けの機能で、面白いのは「左寄せする」「右寄せする」というのがあり、これも別の「小技」で解説したいところですが、今回は参考に「右寄せする」を合わせてご紹介いたします。

>文字列実体変数の空き領域（左側および右側）に半角空白文字を満たす機能
　　　　　　　　　　　　　　↑:point_up:
              
# Mindプログラムソース

```mind:satisfyhunger.src
ハンバーガーは　文字列定数　「ハンバーガーを食べる」。
腹加減を見るは　一行表示と  等価。

空腹を満たすとは　（・　→　・）
        お腹は　文字列実体　長さ　３０

    ハンバーガーを　お腹に　入れ
    お腹の　腹加減を見る
    お腹を　右寄せし
    お腹の　空白を満たす
    お腹の　腹加減を見る。

メインとは　（・　→　・）
    空腹を満たすこと。
```
「ハンバーガーを　お腹に　入れ」は、「ハンバーガー」という文字列定数を「お腹」というサイズ３０バイトの文字列実体変数に代入することを意味します。
「お腹の　腹加減を見る」とは、文字列実体変数「お腹」を改行コード付きでコンソール出力することを意味しています。

「右寄せ」したり「空白を満たす」は文字列実体変数「お腹」を操作しています。これらだけMind標準単語名のままですが、それのがきわだつかなという意図です。

あとは、とりあえず実行結果まで進んでから、解説いたしますね。


# コンパイル結果
ではコンパイルしてみます。下位ライブラリはfileを指定します。

## Mind９
下図はMind９βです。
```cmd:
C:\developments\vscode\mind9>mind satisfyhunger file   

日本語プログラミング言語 Ｍｉｎｄ Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> satisfyhunger.exe
```
## Mind8
```cmd:
C:\developments\vscode\mind9>mind satisfyhunger file

日本語プログラミング言語 Ｍｉｎｄ Version 8.07 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> satisfyhunger.exe
```
## Mind7
```cmd:
C:\developments\vscode\mind9>mind satisfyhunger file
日本語プログラミング言語 Ｍｉｎｄ Version 7.5 for Windows
          Copyright(C) 1985-2004 Scripts Lab. Inc.
          Single user license.  Serial No:********
コンパイル中 - 終了
Coping.. C:\mind7\bin\mindexec.exe -> satisfyhunger.exe
```
# 実行結果
つづいて実行してみます。
Mind7の結果です。記述は割愛していますがMind8/9βも同じです。

```cmd:
C:\developments\vscode\mind9>satisfyhunger          
ハンバーガーを食べる
          ハンバーガーを食べる
```

MindのWindows版の文字コードはSHFT-JISのため、全角１文字２バイトで、固定文字長の文字列実体変数のサイズ３０は全角１５文字分となります。
「ハンバーガーを食べる」で１０文字ですので、残りは全角５文字または半角１０文字となります。

コンソール出力結果なので空白が強調されないのでわかりにくいですが、２行目の出力には左側に半角空白が１０文字追加されています。

コンソール出力の際に出力文字列をフォーマットしてLeftPadingしたのではなく、Mindの場合は変数そのものを操作しています。ですので、一度「空白を満た」した変数はそのまま表示するとなんどでも空白が挿入された状態で出力されます。

# Mindプログラムソース(補足)
最初に「右寄せ」を行うサンプルでしたので、ちょっとわかりにくかったかもしれませんので、「右寄せ」しないサンプルも追加します。

```mind:satisfyhunger2.src
ハンバーガーは　文字列定数　「ハンバーガーを食べる」。
フライドポテトは　文字列定数　「フライドポテトを食べる」。
食べるは　      入れると　  等価。
腹加減を見るは　一行表示と  等価。

空腹を満たすとは　（・　→　・）
        お腹は　文字列実体　長さ　３０
        別腹は　文字列実体　長さ　３０

    ハンバーガーを　お腹に　食べ
    フライドポテトを　別腹に　食べ
    お腹を　表示し
    別腹の　腹加減を見る
    お腹の　空白を満たす
    お腹を　表示し
    別腹の　腹加減を見る。

メインとは　（・　→　・）
    空腹を満たすこと。
```

# 実行結果(補足)
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。

```cmd:
C:\developments\vscode\mind9>satisfyhunger2
ハンバーガーを食べるフライドポテトを食べる
ハンバーガーを食べる          フライドポテトを食べる
```

「表示する」は改行コードを追加しない文字列表示のため、続けて改行コードを追加する「一行表示」を実行しているため、１行目のハンバーガーとフライドポテトはくっついていますね。
そして、「空白で満たす」をハンバーガーを食べた「お腹」に対して行ってから、表示しておき、続けて「別腹」を表示すると、半角空白が右側に１０文字追加されていることがわかります。

# 参考情報
この小技「空白を満たす」を使った記述例の記事はまだありません。


# おわりに
いかがでしたでしょうか？なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕４０周年です。

## 本記事シリーズのご紹介
本記事シリーズ「日本語プログラミング言語Mindの小技」は日本語プログラミング言語Mind生誕４０周年プロジェクトの一環です。興味を持たれた方は[日本語プログラミング言語Mind公式サイト](https://www.scripts-lab.co.jp/mind8download/download.html)にアクセスして、Mindコンパイラをダウンロードできますよ。[Mindプログラミングマニュアル（基本文法）](https://www.scripts-lab.co.jp/mind/ver8/doc/index.html)ページから気になるお題の構文を選んで、この記事のようにサンプル実装実行してQiitaにアウトプットしてみましょう！筆者はMind7/8/9βで検証しておりますが、もちろんMind8だけでもじゅうぶんです。またお題が既存記事とかぶるのはまったく問題ありません。同じお題でみなさまの多様斬新なサンプルをお待ちしております:grinning:面白い！、楽しい、カンタン、難しいのも書ける！みんなでやってみよう:relaxed: