日本語プログラミング言語Mindの小技 「もう一度」～ループの先頭からもう一度やりなおす～

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

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

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

この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載があります。
３ 制御構文
└ここから～繰り返す

>繰り返し処理の最も標準的なものである。次のような構文で用いる。（赤字が構文の基本要素）
>
>構文＝　ここから
　　　　　　　　・・・・・・・・・・・・
　　　　　　　　・・・・・・・・・・・・
　　　　　　　　＜条件値発生処理＞
　　　　　　　　　　　　ならば　打ち切り
　　　　　　　　　　　　つぎに
　　　　繰り返し

～引用略～

>　「もう一度」は、〔ここから...繰り返す〕の文あるいは、次に解説する〔回数指定し...繰り返す〕の構文で用いることができ、強制的に、繰り返しの最初に戻す効果を持つ特殊な単語である（「打ち切り」の逆のような働きである）。

「もう一度」を使ったサンプル構文は割愛させていただいております。ぜひ、オンラインマニュアルの該当箇所を開いて原文を読んでください。

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

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

# 小技の解説
本来であればMindのループ構造構文を最初に解説するべきところではありますが、それは別の機会にゆずって、ここではいきなりMindのループ構文に付随して特徴的ないいまわしの単語「もう一度」について説明いたします。

「もう一度」はループの先頭に処理を復帰させる単語です。他のプログラミング言語での「continue」文に相当します。

「continue」を直訳すると「続く」となりますが、直訳された日本語の語感からのイメージに比べて、この場合の効用として想起されるべきイメージとしは「もう一度」のがわかりやすいですね。

Mindは特定のひらがな助詞以外の漢字に続くひらがなは無視されますので、次節のサンプルソースのように「もう一度やりなおす」と冗長表現するのもよりわかりやすいですね:relaxed:


# Mindプログラムソース

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

メインとは　（・　→　・）
    ループの先頭からもう一度やりなおすこと。
```

「ここから～繰り返す」構文はそれ自体として打ち切り条件を持ちませんので、なんらかの変化する状態値をループ内で変化させ、状態値が打ち切り条件に満たされた場合は「打ち切り」するを記述します。

このサンプルでは単純に、「カウンタ」という変数を宣言し、０で初期化してからループの先頭でインクリメントして、その「カウンタ」の値を判定して、打ち切りを行っています。

>        カウンタが　３０より　大きい　ならば　打ち切り　つぎに

これはカウンタが３０になったらループを打ち切ることを意味します。

つづいて、本体処理ですが、とりあえずカウンタをコンソール出力しています。
>        カウンタが　２０より　小さい　ならば　カウンタを　数値表示し　改行し　つぎに

この構文自体は、カウンタが２０になる前までならば、カウンタをコンソール出力します。これだけの場合は１から出力するはずですが、後述の実行結果では１０から出力しています。

それは下記の構文がカウンタが１０になるまでは後続処理をスキップさせているからです。
>        カウンタが　１０より　小さい　ならば　もう一度やりなおす　つぎに

Mind標準単語名は「もう一度」ですが、筆者の味付けでコンパイラが無視するひらがなの「やりなおす」を付け足しています。これで問題なくコンパイルされ実行できるのは次節の実行結果のとおりです。

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

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

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

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

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

```

# Mindプログラムソース（小技「等価」使用）
以前ご紹介した[小技の「等価」](https://qiita.com/mylifewithviolin/items/51e1522621cd4a4d5ab2)を使って、同じく[以前ご紹介した](https://qiita.com/mylifewithviolin/items/aa3eda2236ab1777a9ea)ように、「ならば～つぎに」の条件分岐構文の日本語表現を少し調整したバージョンとして下記のように書くこともできます。こちらの実行結果も前記同様です。

```mind:onceagain2.src
ならは　ならばと　等価。
しますは　つぎと　等価。

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

メインとは　（・　→　・）
    ループの先頭からもう一度やりなおすこと。
```

# 参考情報
この小技「もう一度」を使った記述例の記事はまだありません。見つけたら教えてくださいね。


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