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-20

はじめに

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

Mind(マインド)とは

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

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

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

定番アルゴリズム:線形探索法とは

アルゴリズムは、問題を解決するための手順や計算方法を意味します。探索はデータの中から特定の条件に合致するデータを見つけ出すためのアルゴリズムで、いくつかの定番ロジックが存在します。

ここではその中のひとつ線形探索(法)をまず扱ってみます。線形探索(法)はシンプルなロジックである一方効率はよくないとされます。データ数の増加に応じて実行時間はリニアに増加します。

線形探索(法)はデータ群を一定の順序で「順々に」判定していきます。「順々に」は「順次」という概念が相当します。判定するこということは合致するかしないかという「分岐」という概念が登場します。この場合、同じ判定操作を繰り返すことになりますので、通常「反復」という概念が登場します。

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

順次、分岐、反復の3つの制御構造(control structures)によって処理の流れを記述することを構造化プログラミングといいます。

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

お題のソースコード

最初はもっともシンプルに反復(ループ)を使わずに、まさに順々に処理する手順を記述します。データ群には5つの文字列変数を用意します。
段ボール箱が5つあり、その4つ目に赤いボールが入っている状態をイメージしてください。

linearsearch.src
段ボール箱1は 文字列実体。
段ボール箱2は 文字列実体。
段ボール箱3は 文字列実体。
段ボール箱4は 文字列実体。
段ボール箱5は 文字列実体。
赤いボールは 文字列定数 「赤いボール」。

段ボール箱の1つに赤いボールを隠すとは  (・ → ・)
    段ボール箱4に 赤いボールを 入れる。

段ボール箱を順々に探索するとは  (・ → ・)
    段ボール箱1が 赤いボールに 等しい文字列?
    ならば 「1つ目にあった!」を 一行表示し 終わり
    さもなければ 「1つ目にはない」を 一行表示し
    つぎに
    段ボール箱2が 赤いボールに 等しい文字列?
    ならば 「2つ目にあった!」を 一行表示し 終わり
    さもなければ 「2つ目にはない」を 一行表示し
    つぎに
    段ボール箱3が 赤いボールに 等しい文字列?
    ならば 「3つ目にあった!」を 一行表示し 終わり
    さもなければ 「3つ目にはない」を 一行表示し
    つぎに
    段ボール箱4が 赤いボールに 等しい文字列?
    ならば 「4つ目にあった!」を 一行表示し 終わり
    さもなければ 「4つ目にはない」を 一行表示し
    つぎに
    段ボール箱5が 赤いボールに 等しい文字列?
    ならば 「5つ目にあった!」を 一行表示し 終わり
    さもなければ 「5つ目にはない」を 一行表示し
    つぎに。
    
メインとは  (・ → ・)
    段ボール箱の1つに赤いボールを隠し
    段ボール箱を順々に探索する。

通常は異なる手順を順々に記述することが多いですが、ここでは基本的に等価な内容の反復にできそうなところ(いちおう判定対象の変数名がそれぞれ異なっている)をあえて順々に記述しています。

そして下記のようなヶ所が「分岐」しているところになります。このバージョンでは5か所あります。

linearsearch.src
    段ボール箱1が 赤いボールに 等しい文字列?
    ならば 「1つ目にあった!」を 一行表示し 終わり
    さもなければ 「1つ目にはない」を 一行表示し
    つぎに

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

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

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

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

無事に成功しました。文字列同士を比較している「等しい文字列?」を「等しい?」と書かないように注意してください。

実行結果

実行結果です。

C:\developments\vscode\mind9\algorithm>linearsearch
1つ目にはない
2つ目にはない
3つ目にはない
4つ目にあった!

C:\developments\vscode\mind9\algorithm>

お題のソースコード(反復版)

つぎは反復を使ってみます。まさに同じ手順を順々に処理するところを反復で記述します。データ群には5つの要素を持つ「配列」という特殊な変数を用意します。

引き続き、段ボール箱が5つあり、その4つ目に赤いボールが入っている状態をイメージしてください。段ボール箱は1つづつ5つ並んでいるのではなく、1つの長い段ボール箱が5つのセクションで区切られているようなイメージが近いです。

linearsearchloop.src
段ボール箱は 5つの 文字列実体。
赤いボールは 文字列定数 「赤いボール」。

段ボール箱の1つに赤いボールを隠すとは  (・ → ・)
    段ボール箱(4)に 赤いボールを 入れる。

段ボール箱を順々に探索するとは  (・ → ・)
    段ボール箱の 要素数で 回数指定し
        段ボール箱(回数)が 赤いボールに 等しい文字列?
        ならば 回数を 数値表示し 「つ目にあった!」を 一行表示し 打ち切り
        さもなければ 回数を 数値表示し 「つ目にはない」を 一行表示し
        つぎに
    繰り返す。

メインとは  (・ → ・)
    段ボール箱の1つに赤いボールを隠し
    段ボール箱を順々に探索する。

下記のヶ所が「反復」で記述しているところとなります。

linearsearchloop.src
段ボール箱は 5つの 文字列実体。
※~略~

    段ボール箱の 要素数で 回数指定し
        ※~略~
    繰り返す。

「段ボール箱の 要素数」は「回数指定し」の前に5を置いています。

そして下記のヶ所が「分岐」しているところになります。「反復」形式で記述していますので、変数名が配列の要素番号=回数で指定されています。

linearsearchloop.src
      ※~略~
        段ボール箱(回数)が 赤いボールに 等しい文字列?
        ならば 回数を 数値表示し 「つ目にあった!」を 一行表示し 打ち切り
        さもなければ 回数を 数値表示し 「つ目にはない」を 一行表示し
        つぎに
      ※~略~

お題のソースコード(反復版)をコンパイル

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

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

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

無事に成功しました。

実行結果(反復版)

実行結果です。

C:\developments\vscode\mind9\algorithm>linearsearchloop
1つ目にはない
2つ目にはない
3つ目にはない
4つ目にあった!

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?