日本語プログラミング言語Mindの小技 「単語を切り出す」～元文字列も切り出された状態になる～

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

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

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

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

>構文＝　＜文字列変数＞から　単語切り出し　→　＜文字列＞
>
>注　・副作用を受ける文字列情報変数または文字列実体変数の明示が必要。
　　 ・その変数名に送り仮名が必須で上記「から」のほか「を」、「より」でも可。
　　 ・元の文字列は切り出した分だけ縮小する（続いて同じ操作ができる）。
>
> 英語の文章のように、文字列が空白などを挟んだ複数の単語から構成されている場合、その単語を切り出す機能である。少し前に解説した「切り出し」と同じように元の文字列変数は副作用を受け、切り出した分だけ削減される。つまり続けて何度も同じ操作を行うことで、次々と単語を取り出すことができる。
　この「単語切り出し」は次のような手順で行われる。
文字列の先頭の空白を除く
(空白以外の)文字群をそれが続くかぎり切り出す
再び空白が現れたところで切り出しを停止する
　「単語切り出し」は、空白などで区切られていれば、英語／日本語のあらゆるテキストに適用できる。


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

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

# 小技の解説
「単語切り出し」（「単語を切り出す」***1** ）はMindの文字列切り出し機能の１つです。

他のプログラミング言語の文字列切り出し機能では「subString」などがありますが、Mindのこの機能では、空白（相当文字）で区切ってある切り出し元文字列の先頭からつぎつぎと空白区切りの文字列を切り出してゆき、切り出し元の文字列からも切り出された文字列は除去されますので、比較的高水準な機能のライブラリとなります。

公式マニュアルの後半部分には空白文字として認識する文字については下記の記載があります。この点については別記事で別途触れるとして、本記事では全角空白を例としてサンプル実装します。

>　なお、単語間の 空白文字として認識する文字 であるが、本来の空白のほかに、カンマ、読点（ここまで半角・全角どちらも）、タブなど多くの記号が対象となる。詳細は処理単語「空白？」の解説を参照されたい。


***1** この機能の処理単語名「単語切り出し」はMindの処理単語名全般について漢字に続くひらがなはトークンとしては無視されますので（一部特定送り仮名としては無視されない例外あり ***2** ）、件名のように「単語を切り出す」でも、記事本文中の「単語切り出し」でも記述可です。ひらがなの使い方を文脈により表意性を調整しながら単語トークンの一意性を確保するというのもMindの大きな特徴です。

***2** 詳しくは下記の記事をご参照ください。

https://qiita.com/mylifewithviolin/items/85eac9eb6b9393afee64


# Mindプログラムソース

```mind:wordsSegmentation.src
切り出し元文字列は　　　　文字列実体　長さ　１００。
切り出し単語帳は　７つの　文字列実体　長さ　１０。

切り出し元文字列を初期化するとは　（・　→　・）
    切り出し元文字列に　「　Ｍｉｎｄ　なでしこ　Ｃ　Ｃ＋＋　Ｃ＃　Ｊａｖａ　Typescript　」を　入れること。

切り出し元文字列を一行表示とは　（・　→　・）
    「切り出し元文字列：」を　表示し　
    切り出し元文字列を ダブルクオートで囲んで表示し　改行すること。

単語を一行表示とは　（文字列　→　・）
    「切り出し単語：」を　表示し　一行表示すること。

メインとは　（・　→　・）
        切り出し単語は　文字列

    切り出し元文字列を初期化し、
    切り出し元文字列を一行表示して　改行し、「単語切り出しを開始」を　一行表示し、
    
    切り出し単語帳の　要素数で　回数指定し
        切り出し元文字列から　単語を切り出して　切り出し単語に　入れ、
        切り出し元文字列を一行表示し、
        切り出し単語で　単語を一行表示し、
        切り出し単語帳（回数）に　切り出し単語を　入れ、
    繰り返してから、

    改行し　「単語切り出し結果を表示」を　一行表示し、
    
    切り出し単語帳の　要素数で　回数指定し
        切り出し単語帳（回数）で　単語を一行表示し、
    繰り返すこと。
```

切り出し元の文字列の状態も切り出される都度、単語が消失している状況をわかりやすくするために表示しています。
切り出し単語は文字列配列としてみました。中間変数の「切り出し単語」ローカル変数はなくてもかまいません。

切り出し元文字列の最初の空白はなくても１単語目は正常に切り出されます。（先頭空白があったとしても正常に切り出されますよという公式マニュアルの補強です。）


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

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

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

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

```cmd:
C:\developments\vscode\mind9>wordsSegmentation
切り出し元文字列："　Ｍｉｎｄ　なでしこ　Ｃ　Ｃ＋＋　Ｃ＃　Ｊａｖａ　Typescript　"

単語切り出しを開始
切り出し元文字列："　なでしこ　Ｃ　Ｃ＋＋　Ｃ＃　Ｊａｖａ　Typescript　"
切り出し単語：Ｍｉｎｄ
切り出し元文字列："　Ｃ　Ｃ＋＋　Ｃ＃　Ｊａｖａ　Typescript　"
切り出し単語：なでしこ
切り出し元文字列："　Ｃ＋＋　Ｃ＃　Ｊａｖａ　Typescript　"
切り出し単語：Ｃ
切り出し元文字列："　Ｃ＃　Ｊａｖａ　Typescript　"
切り出し単語：Ｃ＋＋
切り出し元文字列："　Ｊａｖａ　Typescript　"
切り出し単語：Ｃ＃
切り出し元文字列："　Typescript　"
切り出し単語：Ｊａｖａ
切り出し元文字列："　"
切り出し単語：Typescript

単語切り出し結果を表示
切り出し単語：Ｍｉｎｄ
切り出し単語：なでしこ
切り出し単語：Ｃ
切り出し単語：Ｃ＋＋
切り出し単語：Ｃ＃
切り出し単語：Ｊａｖａ
切り出し単語：Typescript

C:\developments\vscode\mind9>
```


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

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