日本語プログラミング言語Mindの小技 「型紙」～構造体～

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

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

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

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

>　構造体を定義すると、内部の変数や集合の組み合わせとして「型」の定義が行われるが、同時にそのための「領域確保」も行われる。この２つを分離し、「型の定義」と「領域確保」を別にするための概念が「型紙」である。
　この方法をとる利点としては、１つの型紙を使って複数の構造体を定義（実体を獲得）することができることが挙げられる。
注
他の言語、たとえばＣ言語で言うところの構造体は、Mindにおいては型紙に相当する概念であり、この点で用語の違いがある。

>型紙の定義　
　型紙は構造体の機能のうち、型だけを定義するものである。
　定義の規則はほとんど構造体定義と同じであり、次のような形式で定義する。

>　　（型紙の定義）
>
>構文＝
＜型紙名＞は　型紙
　　　　　　　　　　　　＜変数名＞は　　・・・
　　　　　　　　　　　　＜変数名＞は　　・・・
　　　　　　　　＜集合名＞は　・・と　・・と　・・
　　　　　　　　＜集合名＞は　・・と　・・と　・・
　　　　全体は
　　　　　　　　・・・と　・・・と　・・・。
　型紙はそれだけでは実体を持たないので、上記と別に実体を確保するための宣言が必要となる。そのためには、「○○は　構造体」の拡張機能として以下のような記述を使う。
>
>　　（実体の定義）
>
>構文＝
＜構造体名＞は　構造体　＜型紙名＞。



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

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

# 小技の解説
「型紙」はMindの構造体定義においてインスタンス生成（メモリ上の実体確保）を除いた型情報の定義のみをすることを意味する機能です。

マニュアルにも注意事項として記載がありますが、Mindの言語仕様の用語としての「構造体」はインスタンス生成がセットになっている機能を意味しますので他のプログラミング言語ご経験者にとっては注意が必要です。

「型紙」で構造体の型構造を定義した後、実際に使用する実体変数をその型情報で宣言するという、どちらかというと一般的な静的型付け言語の手順を踏むのがこちらです。サンプルを使って説明します。

# Mindプログラムソース

```mind:katagami.src
結果セット型は　型紙
        言語IDは　変数
        言語名は　文字列実体　長さ　200
        公開年は　変数
        よみがなは　文字列実体　長さ　200
    行データは　言語IDと　言語名と　公開年と　よみがな
    全体は
　　    4行の　行データ。

結果セットは　構造体　結果セット型。

結果セット初期化とは　（・　→　・）
    行データの　要素数で　回数指定し
        結果セットの　言語ID(回数)に 回数を　入れ
    繰り返す
    結果セットの　言語名(1)に 「Mind version 1」を　入れ
    結果セットの　言語名(2)に 「Mind version 7」を　入れ
    結果セットの　言語名(3)に 「Mind version 8」を　入れ
    結果セットの　言語名(4)に 「Mind version 9」を　入れ
    結果セットの　公開年(1)に 1985を　入れ
    結果セットの　公開年(2)に 1997を　入れ
    結果セットの　公開年(3)に 2017を　入れ
    結果セットの　公開年(4)に 2025を　入れ
    結果セットの　よみがな(1)に 「まいんどばーじょんいち」を　入れ
    結果セットの　よみがな(2)に 「まいんどばーじょんなな」を　入れ
    結果セットの　よみがな(3)に 「まいんどばーじょんはち」を　入れ
    結果セットの　よみがな(4)に 「まいんどばーじょんきゅう」を　入れること。

結果セット出力とは　（・　→　・）
    行データの　要素数で　回数指定し
        結果セットの　言語ID(回数)を　数値表示し　「|」を　表示し
        結果セットの　言語名(回数)を　表示し　「|」を　表示し
        結果セットの　公開年(回数)を　数値表示し　「年|」を　表示し
        結果セットの　よみがな(回数)を　表示し　「|」を　表示し　改行し
    繰り返す。

メインとは　（・　→　・）
    結果セット初期化し
    結果セット出力すること。

```
構造体定義の終端要素変数の、たとえば「言語名」にアクセスする際には、構造体名の装飾は必要です。

各メンバの要素数は各層で取得できますが、中間メンバ名の行データの要素数を参照する場合は、構造体名の装飾は不要という点が注意事項です。型情報の中で静的に定義された要素数は実体変数の内容ではないので、構造体名の装飾不要という仕様のようです。

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

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

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

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

```cmd:
C:\developments\vscode\mind9>katagami
1|Mind version 1|1985年|まいんどばーじょんいち|
2|Mind version 7|1997年|まいんどばーじょんなな|
3|Mind version 8|2017年|まいんどばーじょんはち|
4|Mind version 9|2025年|まいんどばーじょんきゅう|
```

# Mindプログラムソース(補足)
## 構造体
実は前記のソースコードの場合、構造体の実変数は１つなので、この場合は型紙を使用しなくても、直接、構造体として宣言するとすぐに使えるようになります。

```mind:katagami.src
結果セットは　構造体
        言語IDは　変数
        言語名は　文字列実体　長さ　200
        公開年は　変数
        よみがなは　文字列実体　長さ　200
    行データは　言語IDと　言語名と　公開年と　よみがな
    全体は
　　    4行の　行データ。


結果セット初期化とは　（・　→　・）
    行データの　要素数で　回数指定し
        結果セットの　言語ID(回数)に 回数を　入れ
    繰り返す
    結果セットの　言語名(1)に 「Mind version 1」を　入れ
    結果セットの　言語名(2)に 「Mind version 7」を　入れ
    結果セットの　言語名(3)に 「Mind version 8」を　入れ
    結果セットの　言語名(4)に 「Mind version 9」を　入れ
    結果セットの　公開年(1)に 1985を　入れ
    結果セットの　公開年(2)に 1997を　入れ
    結果セットの　公開年(3)に 2017を　入れ
    結果セットの　公開年(4)に 2025を　入れ
    結果セットの　よみがな(1)に 「まいんどばーじょんいち」を　入れ
    結果セットの　よみがな(2)に 「まいんどばーじょんなな」を　入れ
    結果セットの　よみがな(3)に 「まいんどばーじょんはち」を　入れ
    結果セットの　よみがな(4)に 「まいんどばーじょんきゅう」を　入れること。

結果セット出力とは　（・　→　・）
    行データの　要素数で　回数指定し
        言語ID(回数)を　数値表示し　「|」を　表示し
        言語名(回数)を　表示し　「|」を　表示し
        公開年(回数)を　数値表示し　「年|」を　表示し
        よみがな(回数)を　表示し　「|」を　表示し　改行し
    繰り返す。

メインとは　（・　→　・）
    結果セット初期化し
    結果セット出力すること。

```
この場合、「結果セットの」の構造体名の装飾はなくてもコンパイル可能で動作します。

## 同じ型紙の複数の構造体
型紙を使う場合とは２つ以上の構造体を使用する場合が本来の用途です。

```mind:katagami2.src
結果セット型は　型紙
        言語IDは　変数
        言語名は　文字列実体　長さ　200
        公開年は　変数
        よみがなは　文字列実体　長さ　200
    行データは　言語IDと　言語名と　公開年と　よみがな
    全体は
　　    2行の　行データ。

結果セットは　構造体　結果セット型。
結果セット２は　構造体　結果セット型。


結果セット初期化とは　（・　→　・）
    行データの　要素数で　回数指定し
        結果セットの　言語ID(回数)に 回数を　入れ
        結果セット２の　言語ID(回数)に 回数を　入れ
    繰り返す
    結果セットの　言語名(1)に 「Mind version 1」を　入れ
    結果セットの　言語名(2)に 「Mind version 7」を　入れ
    結果セット２の　言語名(1)に 「Mind version 8」を　入れ
    結果セット２の　言語名(2)に 「Mind version 9」を　入れ
    結果セットの　公開年(1)に 1985を　入れ
    結果セットの　公開年(2)に 1997を　入れ
    結果セット２の　公開年(1)に 2017を　入れ
    結果セット２の　公開年(2)に 2025を　入れ
    結果セットの　よみがな(1)に 「まいんどばーじょんいち」を　入れ
    結果セットの　よみがな(2)に 「まいんどばーじょんなな」を　入れ
    結果セット２の　よみがな(1)に 「まいんどばーじょんはち」を　入れ
    結果セット２の　よみがな(2)に 「まいんどばーじょんきゅう」を　入れること。

結果セット出力とは　（・　→　・）
    行データの　要素数で　回数指定し
        結果セットの　言語ID(回数)を　数値表示し　「|」を　表示し
        結果セットの　言語名(回数)を　表示し　「|」を　表示し
        結果セットの　公開年(回数)を　数値表示し　「年|」を　表示し
        結果セットの　よみがな(回数)を　表示し　「|」を　表示し　改行し
    繰り返す
    行データの　要素数で　回数指定し
        結果セット２の　言語ID(回数)を　数値表示し　「|」を　表示し
        結果セット２の　言語名(回数)を　表示し　「|」を　表示し
        結果セット２の　公開年(回数)を　数値表示し　「年|」を　表示し
        結果セット２の　よみがな(回数)を　表示し　「|」を　表示し　改行し
    繰り返す。

メインとは　（・　→　・）
    結果セット初期化し
    結果セット出力すること。
```
# 実行結果(補足)
## 構造体
Mind7の結果です。記述は割愛していますがMind8/9βも同じです。

```cmd:
C:\developments\vscode\mind9>kouzoutai
1|Mind version 1|1985年|まいんどばーじょんいち|
2|Mind version 7|1997年|まいんどばーじょんなな|
3|Mind version 8|2017年|まいんどばーじょんはち|
4|Mind version 9|2025年|まいんどばーじょんきゅう|
```
## 同じ型紙の複数の構造体
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。

```cmd:
C:\developments\vscode\mind9>katagami2
1|Mind version 1|1985年|まいんどばーじょんいち|
2|Mind version 7|1997年|まいんどばーじょんなな|
1|Mind version 8|2017年|まいんどばーじょんはち|
2|Mind version 9|2025年|まいんどばーじょんきゅう|
```

# 参考情報
この小技を使った記述例の記事です。

https://qiita.com/mylifewithviolin/items/21fa8a6e7531c7d67196

こちらは構造体を使った例です。１つしか実体変数を使わない場合は宣言が簡略化されて便利ですね。

https://qiita.com/mylifewithviolin/items/565e61987a0fbaaa6abe

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