はじめに
本記事シリーズは母国語のプログラミング言語が存在するという文化的価値をアピールするためのもので、プログラミング一般の入門を意図するものではありません。とはいっても題材としては定番アルゴリズムのいくつかを疑似言語ではなくコンパイル・実行可能なプログラミング言語の日本語で書いてみようというたてつけとなります。
Mind(マインド)
プログラミング言語Mind(マインド)は自然な日本語で記述できるスタック指向の軽量中間コードコンパイラ言語です。ただし単語間の分かち書きが必須であくまで形式言語です。逆ポーランド記法1の範囲で分かち書きされた日本語単語の語順が自然と日本語の語順となるという意味の「自然さ」で書くことができ、独自の軽量中間コードのランタイム実行で非常に高速です。実装言語はCまたはMind。初版の登場は1985年で2025年は生誕40周年となりました。
Mind(マインド)の入手方法
無償版のMind version 8 (windows版linux版)を下記の公式サイトからダウンロードできます。フリーメールでかまいませんのでメールアドレスをご登録くださいませ。
定番アルゴリズム:エラトステネスのふるいとは
アルゴリズムは、問題を解決するための手順や計算方法を意味します。アルゴリズムにはいくつかの定番ロジックが存在します。
ここではその中のひとつ「エラトステネスのふるい」を扱ってみます。「エラトステネスのふるい」は指定された整数以下の全ての素数を発見するためのロジックです。
プログラミングの3大ロジック構造とは
順次、分岐、反復の3つの制御構造(control structures)によって処理の流れを記述することを構造化プログラミングといいます。「エラトステネスのふるい」もこの構造で構成されます。
1.順次(sequence) 部分プログラムを順々に実行する。
2.分岐(bifurcation) 条件式が導出した状態に従い、次に実行する部分プログラムを選択して分岐する。
3.反復(repetition) 条件式が導出した特定の状態の間、部分プログラムを繰り返し実行する。ループ処理。
これは問題解決能力の重要な構成要素でもあります。
プログラミング的思考力の構成要素(1)
分解・整理する 複雑な問題を小さな問題に分けて認識する
コンピュテーショナルシンキング(CT) 計算論的思考の構成要素(1)
問題を分解する 複雑な問題を解決可能なレベルまで分解する
お題のソースコード
今回は100までの素数を発見しますので、素数判定結果を格納するため101の要素を持つバイト整数型の配列変数を用意します。こちらは0また1のみを保持しますので1バイトとしています。
また、素数の格納用としては最大100の要素を持つ整数型の配列変数を用意します。こちらも素数候補100以下であればバイト整数型でもよいのですが、念のため32ビット変数としています。
Mindの場合、101の要素数の配列要素番号は1からはじまり101で終わります。
素数候補最大数は 数値 101。
素数候補最大値は 数値 100。
素数候補判定は 素数候補最大数の バイト変数。
エラトステネスのふるいは 素数候補最大値の 変数。
エラトステネスのふるいで素数を得るとは (・ → ・)
現在の素数候補は 変数
素数候補の二乗は 変数
篩ふるいは 変数
素数の個数は 変数
現在の素数候補に 2を 入れ
篩ふるいに 1を 入れ
※2以上を素数候補とする
素数候補最大値で 回数指定し
回数が 現在の素数候補 以上 ならば 素数候補判定(回数)を セットする
つぎに
繰り返す
※for文を使わずloopで打ち切り判定して素数候補判定を繰り返す
ここから
現在の素数候補と 現在の素数候補を 掛けて 素数候補の二乗に 入れ
素数候補の二乗が 素数候補最大値より 大きい ならば 打ち切り つぎへ
素数候補判定(現在の素数候補)が 真?
ならば
篩ふるいに 素数候補の二乗を 入れ
ここから
篩ふるいが 素数候補最大値より 大きい ならば 打ち切り つぎへ
素数候補判定(篩ふるい)を クリアする
篩ふるいと 現在の素数候補を 加え 篩ふるいに 入れ
繰り返す
つぎへ
現在の素数候補を 一つ増加する
繰り返す
※素数の個数を数えてエラトステネスのふるいに入れる
素数の個数に 0を 入れ
素数候補最大値で 回数指定し
素数候補判定(回数)が 真?
ならば 素数の個数を 一つ増加する
回数を エラトステネスのふるい(素数の個数)に 入れる
つぎに
繰り返す。
結果を表示するとは (・ → ・)
素数候補最大値で 回数指定し
エラトステネスのふるい(回数)が 偽?
でなければ
エラトステネスのふるい(回数)を 数値表示し 改行する
つぎに
繰り返す。
メインとは (・ → ・)
エラトステネスのふるいで素数を得てから 結果を表示する。
エラトステネスのふるいはfor文を使ったプログラミング言語の実装例が多いと思いますが、Mindの場合は回数指定反復構文または単純ループ文に相当する構文で実装してみました。
お題のソースコードをコンパイル
では、コンパイルしてみます。Mind8によるコンパイル結果です。
C:\developments\vscode\mind9\algorithm>mind sieveoferatosthenes file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> sieveoferatosthenes.exe
実行結果
実行結果です。
C:\developments\vscode\mind9\algorithm>sieveoferatosthenes
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
ちょっと芸のない出力ですが、素数っぽい数字が並んでいます![]()
ちなみに、素数は1とその数自身以外で割り切れない自然数のことで、2, 3, 5, 7, 11…と無限に続きます。
おわりに
いかがでしたでしょうか?わたしはわが国に母語によるプログラミング言語が存在することを誇りに思っております。言語は文化。こんにちの日本語のポップスやアニメソングなどが海外でそのまま歌われるような近況を鑑みますと、純然たる技術基盤として超強力な米欧発プログラミング言語勢と存在意義を争うこともなく、日本語の文化として海外でも日本語プログラミング言語の愛される日が来るのやもしれません。
-
演算子を被演算子の中間に記述する中置記法 1 + 2、前に記述する前置記法(ポーランド記法)+ 1 2、後に記述する後置記法(逆ポーランド記法)1 2 +がある。日本語は1と 2を 足す。 ↩