日本語プログラミング言語Mindの小技 「分ち書き」～形式言語としての日本語～

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

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

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

この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載があります。
２ プログラム表記の基本
└単語名と分かち書き

>どんなに長い単語であっても、くっついていさえいれば、それで１つの単語として認識される。例えば、
>
>赤い色で表示する
>
>は、「赤い色で表示」という１つの単語である。この単語を引用するには、この長い語をそのまま、
>
>「危険です。」を　赤い色で表示する
>のように引用しなければならない（注３）。
>
>注３ 単語間の平仮名は無視されるので、この場合、「赤色表示する」と書いてもよい。
>
>もし、
「危険です。」を　赤い色で　表示する
と分離して記述したならば、「赤い色」と「表示」の２つの単語が記述されているとみなされる。コンパイラは、「赤い色」と「赤い色で表示する」との間に類似性を見いだすようなことは絶対になく、まったく違う単語であると解釈する。

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

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

# 小技の解説
「分ち書き」は日本語プログラミング言語の中でもアプローチが分かれる点です。

以下に主要な日本語プログラミング言語が分ち書きするかしないかをまとめてみました。

**表１　主要日本語プログラミング言語の特徴**
| 言語名 | 日本語語彙 | 日本語語順 | 分ち書き | オブジェクト指向 |
|:-:|:-:|:-:|:-:|:-:|
|なでしこ|使用する|使用する|しない|対応しない|
|プロデル|使用する|使用する|しない|対応する|
|ドリトル|使用する|使用する|する|対応する|
|Mind|使用する|使用する|する|対応しない|

こうしてみると、分かち書きするかしないかで主要言語の中では半々に分かれた形となります。

分ち書きはソースコードのトークン切り出しで、言語処理系ソフトウェアの負担を大幅に低減します。なでしことプロデルは独自の形態素解析でがんばっている言語処理系です。

基本的に代表的な日本語プログラミング言語は関数形式での記述をデフォルトとしないので、その場合いわゆるパラメータとなる変数の日本語文字列を日本語として動詞っぽい処理単語とくっつけるかくっつけないかは重大な課題となります。

余談ですが、自然言語としてもワード単位で分かち書きしている言語の場合は、人間としても単語の区切りの認識が容易なのに対して、基本的にワード単位で分かち書きしない言語を読み書きする人は認知能力高めと言えます。日本語の文字種はまず漢字という膨大な文字数をもつものに加えて、ひらがな・カタカナがまじりますので、それらの混合テキストをすらすら識別している人間ってすごいと思います。
この言語を発案した民族として日本人というくくりが想定されますが、小さいころから日本語になじんでいればだれでも基本的に識別できるとは思いますので、血筋的な人種民族の能力差というより、基本人間ってすごい存在とわたしは思います。

話は脱線しましたが、Mindは分かち書きをします。日本語風に分ち書きして、パラメータと動詞っぽいワードを日本語風に並べられるというのが、スタック処理の利点ですが、さらにMindコンパイラは分かち書きされた単語の一部の特定ひらがなのぞいてひらがな無視するという大胆な手法のプログラミング言語です。

>あとになったが、単語間を分離する能力のある文字（空白など）は次の通りである。
>
>単語区切りに使える文字
>
>TAB　 　　（タブコード）
>空白　　　 （半角／全角とも）
>， カンマ　（半角／全角とも）
>、 読点　 　（半角／全角とも）
>
>上記に挙げた文字はすべて空白と等価だと思えばよい。半角文字と全角文字を、どちらも同じように受け付けるのはMind の特色である。

上記はMind8公式プログラミングマニュアルからの引用ですが、そういえばMindってTABも区切り文字に使えてましたね。


# Mindプログラムソース

```mind:separater.src
全角空白区切りでループの先頭からもう一度やりなおすとは　（・　→　・）
    カウンタは　変数
カウンタに　０を　入れ
ここから
    カウンタを　一つ増加し
    カウンタが　１０より　小さい　ならば　もう一度やりなおし　つぎへ
    カウンタが　２０より　小さい　ならば　カウンタを　数値表示し　改行　つぎへ
    カウンタが　３０より　大きい　ならば　打ち切り　つぎへ
繰り返す。

半角空白区切りでループの先頭からもう一度やりなおすとは　（・　→　・）
    カウンタは 変数
カウンタに ０を 入れ
ここから
    カウンタを 一つ増加し
    カウンタが １０より 小さい ならば もう一度やりなおし つぎへ
    カウンタが ２０より 小さい ならば カウンタを 数値表示し 改行 つぎへ
    カウンタが ３０より 大きい ならば 打ち切り つぎへ
繰り返す。

全角読点区切りでループの先頭からもう一度やりなおすとは　（・　→　・）
    カウンタは、変数
カウンタに、０を、入れ
ここから
    カウンタを、一つ増加し
    カウンタが、１０より、小さい、ならば、もう一度やりなおし、つぎへ
    カウンタが、２０より、小さい、ならば、カウンタを、数値表示し、改行、つぎへ
    カウンタが、３０より、大きい、ならば、打ち切り、つぎへ
繰り返す。

半角空白読点区切りまじりでループの先頭からもう一度やりなおすとは　（・　→　・）
    カウンタは 変数
カウンタに ０を 入れ
ここから カウンタを 一つ増加し、カウンタが １０より 小さい ならば、 もう一度やりなおし つぎへ、
    カウンタが ２０より 小さい ならば、カウンタを 数値表示し 改行 つぎへ、
    カウンタが ３０より 大きい ならば、打ち切り つぎへ、繰り返す。

メインとは　（・　→　・）
    全角空白区切りでループの先頭からもう一度やりなおし、半角空白区切りでループの先頭からもう一度やりなおし、
    全角読点区切りでループの先頭からもう一度やりなおし、半角空白読点区切りまじりでループの先頭からもう一度やりなおすこと。
```

低レベルの下請け単語を実装する場合はそうでもないですが、いろいろな処理を組み合わせた複合的な処理単語を定義して命名する場合は、だいたいこの単語はなにを行う単語ですということを表現しますので、そこにおいては分かち書きはなくてもよく、非常に日本語的な表現が自由にできます。

「半角空白読点区切りまじりでループの先頭からもう一度やりなおす」では「全角読点区切りでループの先頭からもう一度やりなおす」のように、短い単語を毎回読点で区切ってしまうと若干不自然に見えますので、本来の読点のようにフレーズ感をだすため、複数の単語は空白で区切っておき、そららをまとめた場合に読点を使ってみました。

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

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

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

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

```cmd:
C:\developments\vscode\mind9>separater
10
11
12
13
14
15
16
17
18
19
10
11
12
13
14
15
16
17
18
19
10
11
12
13
14
15
16
17
18
19
10
11
12
13
14
15
16
17
18
19

C:\developments\vscode\mind9>

```


# 参考情報
この小技（というより基本技）「分ち書き」を使った記述例の記事はたくさんあります。例えば下記の記事が該当します。分ち書きの日本語の詩もよいですね。

https://qiita.com/mylifewithviolin/items/3288336a9c346a429fee

# おわりに
いかがでしたでしょうか？なにかの参考になれば幸いです。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: