2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

最初に「あい」を学ぶことば日本語でプログラミング入門(Mindで定番アルゴリズム:バブルソート)

Last updated at Posted at 2025-12-21

はじめに

本記事シリーズは母国語のプログラミング言語が存在するという文化的価値をアピールするためのもので、プログラミング一般の入門を意図するものではありません。とはいっても題材としては定番アルゴリズム:バブルソートを疑似言語ではなくコンパイル・実行可能なプログラミング言語の日本語で書いてみようというたてつけとなります。

Mind(マインド)

プログラミング言語Mind(マインド)は自然な日本語で記述できるスタック指向の軽量中間コードコンパイラ言語です。ただし単語間の分かち書きが必須であくまで形式言語です。逆ポーランド記法1の範囲で分かち書きされた日本語単語の語順が自然と日本語の語順となるという意味の「自然さ」で書くことができ、独自の軽量中間コードのランタイム実行で非常に高速です。実装言語はCまたはMind。初版の登場は1985年で今年2025年は生誕40周年となります。

Mind(マインド)の入手方法

無償版のMind version 8 (windows版linux版)を下記の公式サイトからダウンロードできます。フリーメールでかまいませんのでメールアドレスをご登録くださいませ。

定番アルゴリズム:バブルソートとは

アルゴリズムは、問題を解決するための手順や計算方法を意味します。ソート(整列・並べ替え)はデータの並び順を特定の条件で並べ替えるためのアルゴリズムで、いくつかの定番ロジックが存在します。

ここではその中のひとつバブルソート(基本交換法)をまず扱ってみます。バブルソートは隣り合わせの値と比較して交換を繰り返していくシンプルなロジックとなります。総当たりで並べ替えるため、効率はよくないとされます。

先頭から順に隣り合わせの値と比較し、左の値が大きければ入れ替える、小さければそのまま。これを入れ替えが発生しなくなるまで反復します。

プログラミングの3大ロジック構造とは

順次、分岐、反復の3つの制御構造(control structures)によって処理の流れを記述することを構造化プログラミングといいます。バブルソート(基本交換法)もこの構造で構成されます。

1.順次(sequence) 部分プログラムを順々に実行する。
2.分岐(bifurcation) 条件式が導出した状態に従い、次に実行する部分プログラムを選択して分岐する。
3.反復(repetition) 条件式が導出した特定の状態の間、部分プログラムを繰り返し実行する。ループ処理。

お題のソースコード

bubblesort.src
段ボール箱は 15の 変数。

段ボール箱にボールの数を減らしながら入れるとは  (・ → ・)
    「整列前 」を 一行表示し
    「要素番号 」を 表示し
    段ボール箱の 要素数で 回数指定し
        回数を 二桁で数値表示し 「 」を 表示し
    繰り返す
    改行する
    「ボール数 」を 表示し
    段ボール箱の 要素数で 回数指定し
        段ボール箱の 要素数から 回数を 引いて 5を 加えて 段ボール箱(回数)に 入れる
        段ボール箱(回数)を 二桁で数値表示し 「 」を 表示し
    繰り返す
    改行し
    改行する。

段ボール箱をバブルソートするとは  (・ → ・)
        外側要素番号は 変数
        内側要素番号は 変数
        内側要素番号+1は 変数
        段ボール箱の要素数は 変数
        段ボール箱の要素数から外側要素番号を引いた値は 変数
        一時退避のボール数は 変数

    段ボール箱の要素数に 段ボール箱の 要素数を 入れ    
    外側要素番号に 1を 入れ
    ここから
        「外側要素番号」を 表示し 外側要素番号を 数値表示し 改行し

        段ボール箱の要素数から 外側要素番号を 引いて 
        段ボール箱の要素数から外側要素番号を引いた値に 入れ

        外側要素番号が 段ボール箱の要素数より 大きい
        ならば 打ち切り
        つぎに
        内側要素番号に 1を 入れ
        ここから
            「 内側要素番号」を 表示し 内側要素番号を 数値表示し 改行し
            内側要素番号が 段ボール箱の要素数から外側要素番号を引いた値より 大きい
            ならば 打ち切り
            つぎに
            内側要素番号に 1を 加えて 内側要素番号+1に 入れ
            段ボール箱(内側要素番号)が 段ボール箱(内側要素番号+1)より 大きい
            ならば
                一時退避のボール数に 段ボール箱(内側要素番号)を 入れ
                段ボール箱(内側要素番号)に 段ボール箱(内側要素番号+1)を 入れ
                段ボール箱(内側要素番号+1)に 一時退避のボール数を 入れ
                ※処理経過表示処理ここから
                「 要素番号」を 表示し 内側要素番号を 数値表示し 「と」を 表示し 
                                     内側要素番号+1を 数値表示し 「を入れ替えました。」を 表示し
                段ボール箱(内側要素番号)を 数値表示し 「 ⇔ 」を 表示し
                段ボール箱(内側要素番号+1)を 数値表示し 改行し
                ※処理経過表示処理ここまで
            つぎに
            内側要素番号を 一つ増加する
        繰り返す
        外側要素番号を 一つ増加する
    繰り返す。

整列後の段ボール箱のボールの数を表示するとは  (・ → ・)
    改行し
    「整列後 」を 一行表示し
    「要素番号 」を 表示し
    段ボール箱の 要素数で 回数指定し
        回数を 二桁で数値表示し 「 」を 表示し
    繰り返す
    改行し
    「ボール数 」を 表示し
    段ボール箱の 要素数で 回数指定し
        段ボール箱(回数)を 二桁で数値表示し 「 」を 表示し
    繰り返す
    改行する。

メインとは  (・ → ・)
    段ボール箱にボールの数を減らしながら入れ
    段ボール箱をバブルソートし
    整列後の段ボール箱のボールの数を表示する。

「段ボール箱をバブルソートする」が賞味のロジックです。処理経過がわかるように、入れ替えが生じた場合はその旨コンソールに出力しています。

お題のソースコードをコンパイル

では、コンパイルしてみます。

C:\developments\vscode\mind9\algorithm>mind bubblesort file

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

無事に成功しました。

実行結果

実行結果です。

C:\developments\vscode\mind9\algorithm>bubblesort
整列前 
要素番号  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
ボール数 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5 

外側要素番号1
 内側要素番号1
 要素番号1と2を入れ替えました。18 ⇔ 19
 内側要素番号2
 要素番号2と3を入れ替えました。17 ⇔ 19
 内側要素番号3
 要素番号3と4を入れ替えました。16 ⇔ 19
 内側要素番号4
 要素番号4と5を入れ替えました。15 ⇔ 19
 内側要素番号5
 要素番号5と6を入れ替えました。14 ⇔ 19
 内側要素番号6
 要素番号6と7を入れ替えました。13 ⇔ 19
 内側要素番号7
 要素番号7と8を入れ替えました。12 ⇔ 19
 内側要素番号8
 要素番号8と9を入れ替えました。11 ⇔ 19
 内側要素番号9
 要素番号9と10を入れ替えました。10 ⇔ 19
 内側要素番号10
 要素番号10と11を入れ替えました。9 ⇔ 19
 内側要素番号11
 要素番号11と12を入れ替えました。8 ⇔ 19
 内側要素番号12
 要素番号12と13を入れ替えました。7 ⇔ 19
 内側要素番号13
 要素番号13と14を入れ替えました。6 ⇔ 19
 内側要素番号14
 要素番号14と15を入れ替えました。5 ⇔ 19
 内側要素番号15
外側要素番号2
 内側要素番号1
 要素番号1と2を入れ替えました。17 ⇔ 18
 内側要素番号2
 要素番号2と3を入れ替えました。16 ⇔ 18
 内側要素番号3
 要素番号3と4を入れ替えました。15 ⇔ 18
 内側要素番号4
 要素番号4と5を入れ替えました。14 ⇔ 18
 内側要素番号5
 要素番号5と6を入れ替えました。13 ⇔ 18
 内側要素番号6
 要素番号6と7を入れ替えました。12 ⇔ 18
 内側要素番号7
 要素番号7と8を入れ替えました。11 ⇔ 18
 内側要素番号8
 要素番号8と9を入れ替えました。10 ⇔ 18
 内側要素番号9
 要素番号9と10を入れ替えました。9 ⇔ 18
 内側要素番号10
 要素番号10と11を入れ替えました。8 ⇔ 18
 内側要素番号11
 要素番号11と12を入れ替えました。7 ⇔ 18
 内側要素番号12
 要素番号12と13を入れ替えました。6 ⇔ 18
 内側要素番号13
 要素番号13と14を入れ替えました。5 ⇔ 18
 内側要素番号14
外側要素番号3
 内側要素番号1
 要素番号1と2を入れ替えました。16 ⇔ 17
 内側要素番号2
 要素番号2と3を入れ替えました。15 ⇔ 17
 内側要素番号3
 要素番号3と4を入れ替えました。14 ⇔ 17
 内側要素番号4
 要素番号4と5を入れ替えました。13 ⇔ 17
 内側要素番号5
 要素番号5と6を入れ替えました。12 ⇔ 17
 内側要素番号6
 要素番号6と7を入れ替えました。11 ⇔ 17
 内側要素番号7
 要素番号7と8を入れ替えました。10 ⇔ 17
 内側要素番号8
 要素番号8と9を入れ替えました。9 ⇔ 17
 内側要素番号9
 要素番号9と10を入れ替えました。8 ⇔ 17
 内側要素番号10
 要素番号10と11を入れ替えました。7 ⇔ 17
 内側要素番号11
 要素番号11と12を入れ替えました。6 ⇔ 17
 内側要素番号12
 要素番号12と13を入れ替えました。5 ⇔ 17
 内側要素番号13
外側要素番号4
 内側要素番号1
 要素番号1と2を入れ替えました。15 ⇔ 16
 内側要素番号2
 要素番号2と3を入れ替えました。14 ⇔ 16
 内側要素番号3
 要素番号3と4を入れ替えました。13 ⇔ 16
 内側要素番号4
 要素番号4と5を入れ替えました。12 ⇔ 16
 内側要素番号5
 要素番号5と6を入れ替えました。11 ⇔ 16
 内側要素番号6
 要素番号6と7を入れ替えました。10 ⇔ 16
 内側要素番号7
 要素番号7と8を入れ替えました。9 ⇔ 16
 内側要素番号8
 要素番号8と9を入れ替えました。8 ⇔ 16
 内側要素番号9
 要素番号9と10を入れ替えました。7 ⇔ 16
 内側要素番号10
 要素番号10と11を入れ替えました。6 ⇔ 16
 内側要素番号11
 要素番号11と12を入れ替えました。5 ⇔ 16
 内側要素番号12
外側要素番号5
 内側要素番号1
 要素番号1と2を入れ替えました。14 ⇔ 15
 内側要素番号2
 要素番号2と3を入れ替えました。13 ⇔ 15
 内側要素番号3
 要素番号3と4を入れ替えました。12 ⇔ 15
 内側要素番号4
 要素番号4と5を入れ替えました。11 ⇔ 15
 内側要素番号5
 要素番号5と6を入れ替えました。10 ⇔ 15
 内側要素番号6
 要素番号6と7を入れ替えました。9 ⇔ 15
 内側要素番号7
 要素番号7と8を入れ替えました。8 ⇔ 15
 内側要素番号8
 要素番号8と9を入れ替えました。7 ⇔ 15
 内側要素番号9
 要素番号9と10を入れ替えました。6 ⇔ 15
 内側要素番号10
 要素番号10と11を入れ替えました。5 ⇔ 15
 内側要素番号11
外側要素番号6
 内側要素番号1
 要素番号1と2を入れ替えました。13 ⇔ 14
 内側要素番号2
 要素番号2と3を入れ替えました。12 ⇔ 14
 内側要素番号3
 要素番号3と4を入れ替えました。11 ⇔ 14
 内側要素番号4
 要素番号4と5を入れ替えました。10 ⇔ 14
 内側要素番号5
 要素番号5と6を入れ替えました。9 ⇔ 14
 内側要素番号6
 要素番号6と7を入れ替えました。8 ⇔ 14
 内側要素番号7
 要素番号7と8を入れ替えました。7 ⇔ 14
 内側要素番号8
 要素番号8と9を入れ替えました。6 ⇔ 14
 内側要素番号9
 要素番号9と10を入れ替えました。5 ⇔ 14
 内側要素番号10
外側要素番号7
 内側要素番号1
 要素番号1と2を入れ替えました。12 ⇔ 13
 内側要素番号2
 要素番号2と3を入れ替えました。11 ⇔ 13
 内側要素番号3
 要素番号3と4を入れ替えました。10 ⇔ 13
 内側要素番号4
 要素番号4と5を入れ替えました。9 ⇔ 13
 内側要素番号5
 要素番号5と6を入れ替えました。8 ⇔ 13
 内側要素番号6
 要素番号6と7を入れ替えました。7 ⇔ 13
 内側要素番号7
 要素番号7と8を入れ替えました。6 ⇔ 13
 内側要素番号8
 要素番号8と9を入れ替えました。5 ⇔ 13
 内側要素番号9
外側要素番号8
 内側要素番号1
 要素番号1と2を入れ替えました。11 ⇔ 12
 内側要素番号2
 要素番号2と3を入れ替えました。10 ⇔ 12
 内側要素番号3
 要素番号3と4を入れ替えました。9 ⇔ 12
 内側要素番号4
 要素番号4と5を入れ替えました。8 ⇔ 12
 内側要素番号5
 要素番号5と6を入れ替えました。7 ⇔ 12
 内側要素番号6
 要素番号6と7を入れ替えました。6 ⇔ 12
 内側要素番号7
 要素番号7と8を入れ替えました。5 ⇔ 12
 内側要素番号8
外側要素番号9
 内側要素番号1
 要素番号1と2を入れ替えました。10 ⇔ 11
 内側要素番号2
 要素番号2と3を入れ替えました。9 ⇔ 11
 内側要素番号3
 要素番号3と4を入れ替えました。8 ⇔ 11
 内側要素番号4
 要素番号4と5を入れ替えました。7 ⇔ 11
 内側要素番号5
 要素番号5と6を入れ替えました。6 ⇔ 11
 内側要素番号6
 要素番号6と7を入れ替えました。5 ⇔ 11
 内側要素番号7
外側要素番号10
 内側要素番号1
 要素番号1と2を入れ替えました。9 ⇔ 10
 内側要素番号2
 要素番号2と3を入れ替えました。8 ⇔ 10
 内側要素番号3
 要素番号3と4を入れ替えました。7 ⇔ 10
 内側要素番号4
 要素番号4と5を入れ替えました。6 ⇔ 10
 内側要素番号5
 要素番号5と6を入れ替えました。5 ⇔ 10
 内側要素番号6
外側要素番号11
 内側要素番号1
 要素番号1と2を入れ替えました。8 ⇔ 9
 内側要素番号2
 要素番号2と3を入れ替えました。7 ⇔ 9
 内側要素番号3
 要素番号3と4を入れ替えました。6 ⇔ 9
 内側要素番号4
 要素番号4と5を入れ替えました。5 ⇔ 9
 内側要素番号5
外側要素番号12
 内側要素番号1
 要素番号1と2を入れ替えました。7 ⇔ 8
 内側要素番号2
 要素番号2と3を入れ替えました。6 ⇔ 8
 内側要素番号3
 要素番号3と4を入れ替えました。5 ⇔ 8
 内側要素番号4
外側要素番号13
 内側要素番号1
 要素番号1と2を入れ替えました。6 ⇔ 7
 内側要素番号2
 要素番号2と3を入れ替えました。5 ⇔ 7
 内側要素番号3
外側要素番号14
 内側要素番号1
 要素番号1と2を入れ替えました。5 ⇔ 6
 内側要素番号2
外側要素番号15
 内側要素番号1
外側要素番号16

整列後 
要素番号  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
ボール数  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 

C:\developments\vscode\mind9\algorithm>

外側要素番号と内側要素番号もそれぞれの状態値を出力していますので、総当たりで入れ替えていることがわかります。

おわりに

いかがでしたでしょうか?わたしはわが国に母語によるプログラミング言語が存在することを誇りに思っております。言語は文化。こんにちの日本語のポップスやアニメソングなどが海外でそのまま歌われるような近況を鑑みますと、純然たる技術基盤として超強力な米欧発プログラミング言語勢と存在意義を争うこともなく、日本語の文化として海外でも日本語プログラミング言語の愛される日が来るのやもしれません。

  1. 演算子を被演算子の中間に記述する中置記法 1 + 2、前に記述する前置記法(ポーランド記法)+ 1 2、後に記述する後置記法(逆ポーランド記法)1 2 +がある。日本語は1と 2を 足す。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?