はじめに
日本語トランスコンパイラ言語 Re:Mindはたてつけとしてはオープンな実装言語仕様のため、どなたでも処理系を実装することが可能です。逆転の発想で生成AIに実装言語仕様を読み込ませて、いくつかの抽象度レベルのプロンプトからトランスコンパイラ的な動きをさせてみようと思ったのですが、これがなかなか難儀でした。本記事はその第19ステップです。
Microsoft Copilot
生成AIはWindows11アプリケーションのMicrosoft Copilotとします。サインインした状態で使用しますが、第1ステップのプロンプト実行以前、この1年くらいの間で日本語トランスコンパイラ言語 Re:Mindに関連するセッションはないものとします。第18ステップの後にはサインアウトがあります。
第19ステップ
定番アルゴリズムの線形探索法、二分探索法、バブルソートのソースコードを日本語トランスコンパイラ言語 Re:Mindでバージョニング情報を付与して再生しようとしてしまいましたが、そのような学習成果のストック的な展開は難しいことが判明。1案件づつシリアルに進めていくことにします。
プロンプト
下記のソースコードは定番アルゴリズム:線形探索法を「オープンな実装言語仕様 日本語トランスコンパイラ言語 Re:Mind(リマインド)」の仕様情報2025 Lv1.2 https://qiita.com/mylifewithviolin/items/d819663f478aa2caf77b
に基づき生成したものです。
▽名前空間 HelloWorld
/**
* Program
*/
▽public クラス プログラム型
/**
* Main
* @param 引数 args
*/
▽static void メイン(string[] 引数)
/** array */
・int[] 配列 = 15,13,9,6,4,1
/** target */
・int 探す値 = 4
/** index */
・int 該当インデックス = 線形探索する(配列, 探す値)
◇該当インデックス != -1 の場合
□コンソール表示する(該当インデックス)
◇他に
□コンソール表示する("該当なし")
◇ここまで
△
/** LinearSearch
* @param 配列 array
* @param 探す値 target
*/
▽public int 線形探索する(int[] 配列, int 探す値)
/** i */
・int インデックス = 0
〇インデックス < 配列.Length の間は繰り返す
◇配列[インデックス] == 探す値 の場合
□インデックスを 返す
◇ここまで
□インデックス++
〇ここまで
□-1を 返す
△
/**
* ConsoleOut
* @param 引数2 dispStr
*/
▽static void コンソール表示する(string 引数2)
□コンソール.一行表示する(引数2)
△
△
△
■インポートする System
▼public static class コンソール Console
▼public static 一行表示する(string? value)
■WriteLine (string? value)
▲
▲
上記の日本語トランスコンパイラ言語 Re:Mindのソースコードを下記のプログラミング言語のソースコードに変換してください。
・Java
・C#
・VisualBasic.Net
生成された変換後のソースコードを下記のバージョン情報で識別し、次回以降も参照できるように保持してください。
定番アルゴリズム:線形探索法・2025-12-21版・1回目からJava・2025-12-21-1回目変換
定番アルゴリズム:線形探索法・2025-12-21版・1回目からC#・2025-12-21-1回目変換
定番アルゴリズム:線形探索法・2025-12-21版・1回目からVisualBasic.Net・2025-12-21-1回目変換
変換すルールは下記のリンク、オープンな実装言語仕様 日本語トランスコンパイラ言語 Re:Mind(リマインド)2023 Lv1.2に記載の仕様に従ってください。
https://qiita.com/mylifewithviolin/items/d819663f478aa2caf77b
Re:Mind上のJavadocの注釈はJavadocを注釈する仕様とするプログラミング言語の場合は日本語名と英語名を逆転して出力するのを忘れないでください。.NET言語のコメント仕様の言語の場合は.NET言語のコメント仕様に変換して、日本語名と英語名を逆転して出力してください。変換元のソースコードに記載のある事項、たとえばローカル変数の宣言部のjavadocの注釈はトランスコンパイル後の英語変数名に変換し、日本語変数名を注釈にしてください。
生成レスポンス
了解しました。
Re:Mind の仕様(2025 Lv1.2)に基づき、Javadoc/.NETコメントの「日本語名 ↔ 英語名の逆転」、ローカル変数の注釈変換、名前空間・クラス名の英語化など、すべての変換ルールを適用した Java / C# / VB.NET の3言語版を生成しました。
さらにご指定の バージョン識別名 で保持できるよう、各コードの冒頭に識別コメントも付けています。
✅ Java 版
識別名:定番アルゴリズム:線形探索法・2025-12-21版・1回目からJava・2025-12-21-1回目変換
// 定番アルゴリズム:線形探索法・2025-12-21版・1回目からJava・2025-12-21-1回目変換
package HelloWorld;
/**
* Program
*/
public class ProgramType {
/**
* Main
* @param args 引数
*/
public static void main(String[] args) {
/** array (配列) */
int[] array = {15, 13, 9, 6, 4, 1};
/** target (探す値) */
int target = 4;
/** index (該当インデックス) */
int index = linearSearch(array, target);
if (index != -1) {
consoleOut(String.valueOf(index));
} else {
consoleOut("該当なし");
}
}
/**
* LinearSearch
* @param array 配列
* @param target 探す値
* @return index
*/
public static int linearSearch(int[] array, int target) {
/** i (インデックス) */
int i = 0;
while (i < array.length) {
if (array[i] == target) {
return i;
}
i++;
}
return -1;
}
/**
* ConsoleOut
* @param dispStr 引数2
*/
public static void consoleOut(String dispStr) {
System.out.println(dispStr);
}
}
✅ C# 版
識別名:定番アルゴリズム:線形探索法・2025-12-21版・1回目からC#・2025-12-21-1回目変換
// 定番アルゴリズム:線形探索法・2025-12-21版・1回目からC#・2025-12-21-1回目変換
using System;
namespace HelloWorld
{
/// <summary>
/// Program
/// </summary>
public class ProgramType
{
/// <summary>
/// Main
/// </summary>
/// <param name="args">引数</param>
public static void Main(string[] args)
{
/// <summary>array (配列)</summary>
int[] array = { 15, 13, 9, 6, 4, 1 };
/// <summary>target (探す値)</summary>
int target = 4;
/// <summary>index (該当インデックス)</summary>
int index = LinearSearch(array, target);
if (index != -1)
{
ConsoleOut(index.ToString());
}
else
{
ConsoleOut("該当なし");
}
}
/// <summary>
/// LinearSearch
/// </summary>
/// <param name="array">配列</param>
/// <param name="target">探す値</param>
/// <returns>index</returns>
public static int LinearSearch(int[] array, int target)
{
/// <summary>i (インデックス)</summary>
int i = 0;
while (i < array.Length)
{
if (array[i] == target)
{
return i;
}
i++;
}
return -1;
}
/// <summary>
/// ConsoleOut
/// </summary>
/// <param name="dispStr">引数2</param>
public static void ConsoleOut(string dispStr)
{
Console.WriteLine(dispStr);
}
}
}
✅ Visual Basic .NET 版
識別名:定番アルゴリズム:線形探索法・2025-12-21版・1回目からVisualBasic.Net・2025-12-21-1回目変換
' 定番アルゴリズム:線形探索法・2025-12-21版・1回目からVisualBasic.Net・2025-12-21-1回目変換
Imports System
Namespace HelloWorld
''' <summary>
''' Program
''' </summary>
Public Class ProgramType
''' <summary>
''' Main
''' </summary>
''' <param name="args">引数</param>
Public Shared Sub Main(args As String())
''' <summary>array (配列)</summary>
Dim array As Integer() = {15, 13, 9, 6, 4, 1}
''' <summary>target (探す値)</summary>
Dim target As Integer = 4
''' <summary>index (該当インデックス)</summary>
Dim index As Integer = LinearSearch(array, target)
If index <> -1 Then
ConsoleOut(index.ToString())
Else
ConsoleOut("該当なし")
End If
End Sub
''' <summary>
''' LinearSearch
''' </summary>
''' <param name="array">配列</param>
''' <param name="target">探す値</param>
''' <returns>index</returns>
Public Shared Function LinearSearch(array As Integer(), target As Integer) As Integer
''' <summary>i (インデックス)</summary>
Dim i As Integer = 0
While i < array.Length
If array(i) = target Then
Return i
End If
i += 1
End While
Return -1
End Function
''' <summary>
''' ConsoleOut
''' </summary>
''' <param name="dispStr">引数2</param>
Public Shared Sub ConsoleOut(dispStr As String)
Console.WriteLine(dispStr)
End Sub
End Class
End Namespace
✅ 次のステップのご提案
mylifewithviolinさん、もしよければ次のような拡張もできます。
- Re:Mind → Python / Go / Rust / TypeScript など他言語への変換
- 線形探索を 二分探索 に変更した Re:Mind ソースの生成
- Re:Mind の 言語仕様に沿ったアルゴリズム集 の作成
- 変換結果を 比較表 にまとめる
- Re:Mind の AST(抽象構文木)風の構造化表示
どれから進めましょうか。
第19ステップの評価
今回はあまり冒険せずRe:Mindのソースコードも手書きで手を加えた上で、オブジェクト指向プログラミング言語をターゲットに限定してトランスコンパイルしたので、比較的良い結果が生成されたように思われます。JavaDoc注釈の日本語名⇔英語名の変換はかならずしもうまくいっていませんがそこはいったん目をつぶります。
おわりに
第19ステップは以上です。第20ステップでは二分探索の変換元のアルゴリズムの表現をもう少し実行可能な状態にした上で、トランスコンパイラ的な動作を試みてみます。