日本語プログラミング言語Mindの小技 「空白？」～文字コードを調べる単語～

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

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

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

この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載があります。
７ 文字列操作
└文字列を調べる機能
　└文字コードを調べる単語

>構文＝　＜文字＞が　空白？　→　＜真/偽＞
>
>　文字が空白、カンマ、読点などの空白文字（区切り文字）であることを調べる。カンマ／読点は、半角／全角のどちらでもよい。また、半角空白（十六進で20H）未満の、いわゆる制御コードも空白とみなす。


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

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

# 小技の解説
「空白？」はMindの文字コード判定機能の１つです。

他のプログラミング言語の場合（静的型付けシステムの場合）、文字と文字列の違いは型の違いとなっている場合（例えばChar型のようなものと可変長文字列型のString型のようなもの）がありますが、Mindの場合も、1文字の文字を「文字」、２文字以上の文字列を「文字列」としており、1文字だけの文字型というもの（たとえばChar型のようなもの）はないのですが、Mindの処理単語の中には１文字の文字を文字コードすなわち数値型として扱うものがあります。

この「空白？」もそのひとつです。

まずは公式マニュアルでの解説をひも解きながら補足説明します。

７ 文字列操作
>Mindでは 文字 と 文字列 という２つの用語をはっきりと使い分けている。

これは１文字の文字に対して文字コード型Charのようなものがあるという意味ではないとわたしは解釈しています。実際の定義を見た感じ、文字を文字コードとして扱う場合は数値型の定数、変数として宣言します。

７ 文字列操作
└文字

>まず、Mindでいうところの「文字」とは、独立した１つの文字のことを表す。そして、その１つの文字は、その文字に割り当てられた文字のコードとして評価される。つまり、最終的には、文字は数値と同じ扱いになる。

１文字の文字列定数として宣言した場合と、１文字を数値（文字コード）として宣言した場合では、処理単語が想定している型チェックにひっかかってコンパイルエラーとなる場合があります。「空白？」が想定しているのは文字コード（数値）の変数です。

以下にMindが空白文字と認識する文字（文字コード）をまとめました。
(Windows版・SJIS）

| 文字名 | 16進コード | 備考 |
|:-|:-:|:-|
| 全角空白 |0x8140|「　」   |
| 全角読点 |0x8141|「、」   |
| 全角カンマ |0x8143|「，」|
| 半角空白 |0x20|「 」   |
| 半角カンマ |0x2C|「,」   |
| 制御コード |0x00～0x1F|   |
 
# Mindプログラムソース

```mind:isspace.src
※全角空白は　定義済    　数値　　'　'。
全角読点は　           　数値　　'、'。
全角カンマは　         　数値　　'，'。
※半角空白は　定義済    　数値　　' '。
半角カンマは　         　数値　　','。
半角ピリオドは　       　数値　　'.'。
ＤＥＬは　　　　　　　　　数値　　7FH。
※以下の制御コードは定義済
※ＮＵＬは　　　　　　　　数値　　00H。
※ＢＥＬは　　　　　　　　数値　　07H。
※ＢＳは　　　　　　　　　数値　　08H。
※ＴＡＢは　　　　　　　　数値　　09H。
※ＣＲは　　　　　　　　　数値　　0DH。
※ＬＦは　　　　　　　　　数値　　0AH。
※ＦＦは　　　　　　　　　数値　　0CH。
※ＥＳＣは　　　　　　　　数値　　1BH。

制御コードは空白扱いですよとは　　（数値　→　・）
        制御コードは　変数
    制御コードに　入れ

    制御コードが　空白？
    ならば　
        制御コードを　文字列変換・ワードし　ダブルクオートで囲んで表示し　
        「制御コードは空白扱いです。」を　一行表示し　
    つぎに。

メインとは　（・　→　・）
    全角空白が　空白？　
    ならば　全角空白を　文字列変換・ワードし　ダブルクオートで囲んで表示し
    「全角空白は空白扱いです。」を　一行表示し　つぎに、
    全角読点が　空白？　
    ならば　全角読点を　文字列変換・ワードし　ダブルクオートで囲んで表示し
    「全角読点は空白扱いです。」を　一行表示し　つぎに、
    全角カンマが　空白？　
    ならば　全角カンマを　文字列変換・ワードし　ダブルクオートで囲んで表示し
    「全角カンマは空白扱いです。」を　一行表示し　つぎに、
    半角空白が　空白？　
    ならば　半角空白を　文字列変換・ワードし　ダブルクオートで囲んで表示し
    「半角空白は空白扱いです。」を　一行表示し　つぎに、
    半角ピリオドが　空白？　
    ならば　半角ピリオドを　文字列変換・ワードし　ダブルクオートで囲んで表示し
    「半角ピリオドは空白扱いです。」を　一行表示し　つぎに、
    半角カンマが　空白？　
    ならば　半角カンマを　文字列変換・ワードし　ダブルクオートで囲んで表示し
    「半角カンマは空白扱いです。」を　一行表示し　つぎに、
    ＮＵＬって　制御コードは空白扱いですよね、
    ＢＥＬって　制御コードは空白扱いですよね、
    ＢＳって　制御コードは空白扱いですよね、
    ＴＡＢって　制御コードは空白扱いですよね、
    ＣＲって　制御コードは空白扱いですよね、
    ＬＦって　制御コードは空白扱いですよね、
    ＦＦって　制御コードは空白扱いですよね、
    ＥＳＣって　制御コードは空白扱いですよね、
    ＤＥＬって　制御コードは空白扱いではないですよ。

```
「空白？」が扱う変数を数値として定義しています。文字列として定義した場合の例は後述します。

文字コードを数値として定義する場合、「数値」と宣言した後、' 'で該当文字を囲って数値とすることができます。

制御コードの例はMindで定義済のものを引用しました。0x20H以上の制御コードとして「ＤＥＬ」0x7FHを定義しています。これは空白とは判定されない制御コードです。



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

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

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

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

```cmd:
c:\developments\vscode\mind9>isspace
"8140"全角空白は空白扱いです。
"8141"全角読点は空白扱いです。
"8143"全角カンマは空白扱いです。
"0020"半角空白は空白扱いです。
"002C"半角カンマは空白扱いです。
"0000"制御コードは空白扱いです。
"0007"制御コードは空白扱いです。
"0008"制御コードは空白扱いです。
"0009"制御コードは空白扱いです。
"000D"制御コードは空白扱いです。
"000A"制御コードは空白扱いです。
"000C"制御コードは空白扱いです。
"001B"制御コードは空白扱いです。

c:\developments\vscode\mind9>
```
半角ピリオドと制御コードDEL（7FH）は空白扱いされていないことがわかりますね。

では続いて、判定対象を１文字の文字列とした場合の動作を検証します。
下記のように「全角読点」の定義を文字列定数に変更します。かぎかっこ「」でもよいのですが、ダブルクォーテーションで囲っています。

```mind:isspace2.src
※全角空白は　定義済    　数値　　'　'。
全角読点は　           　文字列定数　　"、"。
```

Mind7とMind8/9βではコンパイル結果が異なります。
### Mind7
```cmd:
C:\developments\vscode\mind9>mind isspace2 file
日本語プログラミング言語 Ｍｉｎｄ Version 7.5 for Windows
          Copyright(C) 1985-2004 Scripts Lab. Inc.
          Single user license.  Serial No:********
コンパイル中 - 終了
2 個のエラーが有ります。

C:\developments\vscode\mind9>
```
```mind:isspace2.inf
isspace2.src 31 行目でエラー。行内容は、
    全角読点が　空白？　
      要因１：処理単語"空白？"に与えるデータの型が誤りです。

isspace2.src 32 行目でエラー。行内容は、
    ならば　全角読点を　文字列変換・ワードし　ダブルクオートで囲んで表示し　「全角読点は空白扱いです。」を　一行表示し　つぎに、
      要因１：処理単語"文字列変換・ワード"に与えるデータの型が誤りです。

2 個のエラーが有ります。
Code=00008470  Data=000A5F24  SymOff=62CC
```
以下はMind8の結果ですが、Mind9βも同じです。

### Mind8
```cmd:
C:\developments\vscode\mind9>mind isspace2 file

日本語プログラミング言語 Ｍｉｎｄ Version 8.07 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> isspace2.exe
```

以下はMind8の実行結果ですがMind9βも同じです。1文字の文字列定数で宣言された全角読点は空白判定されません。

```cmd:
c:\developments\vscode\mind9>isspace2
"8140"全角空白は空白扱いです。
"8143"全角カンマは空白扱いです。
"0020"半角空白は空白扱いです。
"002C"半角カンマは空白扱いです。
"0000"制御コードは空白扱いです。
"0007"制御コードは空白扱いです。
"0008"制御コードは空白扱いです。
"0009"制御コードは空白扱いです。
"000D"制御コードは空白扱いです。
"000A"制御コードは空白扱いです。
"000C"制御コードは空白扱いです。
"001B"制御コードは空白扱いです。

c:\developments\vscode\mind9>
```

Mind8/9βの動作検証用にさらに下記のヶ所を、「ならば」から「でなければ」に変更して「文字列変換・ワード」も「文字列変換・ダブル」にしてコンパイル・実行してみますと、

```mind:isspace2.src
   全角読点が　空白？　
    でなければ　全角読点を　文字列変換・ダブルし　ダブルクオートで囲んで表示し
    「は空白扱いでないです。」を　一行表示し　つぎに、
 ```
 
文字列定数　　"、"を下記のような数値として扱っているようでした。
以下はMind9βの結果ですが、Mind8も同じです。

```cmd:
c:\developments\vscode\mind9>isspace2
～略～
"00C0CAEE"は空白扱いでないです。
～略～
```

# 参考情報
この小技「空白？」を使った記述例の記事はまだありません。みつけたら教えてください。

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

## 本記事シリーズのご紹介
本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕４０周年プロジェクト」の一環です。

興味を持たれた方は[日本語プログラミング言語Mind公式サイト](https://www.scripts-lab.co.jp/mind8download/download.html)にアクセスすると、Mindコンパイラをダウンロードできます。

面白い！、楽しい、カンタン、難しいのも書ける！みんなでやってみよう:relaxed: