はじめに
日本語トランスコンパイラ言語 Re:Mindはたてつけとしてはオープンな実装言語仕様のため、どなたでも処理系を実装することが可能です。逆転の発想で生成AIに実装言語仕様を読み込ませて、いくつかの抽象度レベルのプロンプトからトランスコンパイラ的な動きをさせてみようと思ったのですが、これがなかなか難儀でした。本記事はその第17ステップです。
Microsoft Copilot
生成AIはWindows11アプリケーションのMicrosoft Copilotとします。サインインした状態で使用しますが、第1ステップのプロンプト実行以前、この1年くらいの間で日本語トランスコンパイラ言語 Re:Mindに関連するセッションはないものとします。第15ステップの後にはサインアウトがあります。
第17ステップ
第15ステップまでは定番アルゴリズムの線形探索法、二分探索法、バブルソートのソースコードを日本語トランスコンパイラ言語 Re:Mindでバージョニング情報を付与して再生しようとしてしまいましたが、そのような学習成果のストック的な展開は難しいことが判明。第16ステップ以降は1案件づつシリアルに進めていくことにします。
プロンプト
下記のソースコードは定番アルゴリズム:二分探索法を「オープンな実装言語仕様 日本語トランスコンパイラ言語 Re:Mind(リマインド)」の仕様情報2023 Lv1.1ドラフト https://qiita.com/mylifewithviolin/items/ee1a16a363aaa4fe3f4c
に基づき生成したものです。
/** BinarySearch
* @param 配列 array
* @param 探す値 target
*/
◇public int 二分探索する(int[] 配列, int 探す値)
/** left */
・int 左端 = 0
/** right */
・int 右端 = 配列.Length - 1
〇左端 <= 右端 の間は繰り返す
/** mid */
・int 中央 = (左端 + 右端) / 2
◇配列[中央] == 探す値 の場合
□return 中央
◇ここまで
◇配列[中央] < 探す値 の場合
□左端 = 中央 + 1
◇他に
□右端 = 中央 - 1
◇ここまで
〇ここまで
□return -1
◇ここまで
上記の日本語トランスコンパイラ言語 Re:Mindのソースコードを下記のプログラミング言語のソースコードに変換してください。
・Java
・C#
・Typescript
・Go
・VisualBasic.Net
・VisualBasic for Application
生成された変換後のソースコードを下記のバージョン情報で識別し、次回以降も参照できるように保持してください。
定番アルゴリズム:二分探索法・2025-12-08版・3回目からJava・2025-12-15-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からC#・2025-12-15-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からTypescript・2025-12-15-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からGo・2025-12-11-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からC#・2025-12-15-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からVisualBasic.Net・2025-12-15-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からVisualBasic for Application・2025-12-15-1回目変換
変換すルールは下記のリンク、オープンな実装言語仕様 日本語トランスコンパイラ言語 Re:Mind(リマインド)2023 Lv1.1ドラフトに記載の仕様に従ってください。
https://qiita.com/mylifewithviolin/items/ee1a16a363aaa4fe3f4c
Re:Mind上のJavadocの注釈はJavadocを注釈する仕様とするプログラミング言語の場合は日本語名と英語名を逆転して出力するのを忘れないでください。.NET言語のコメント仕様の言語の場合は.NET言語のコメント仕様に変換して、日本語名と英語名を逆転して出力してください。変換元のソースコードに記載のない事項をむりに創生しないでください。クラス宣言など。また変換元のソースコードに記載のある事項、たとえばローカル変数の宣言部のjavadocの注釈はトランスコンパイル後の英語変数名に変換し、日本語変数名を注釈にしてください。
生成レスポンス
了解しました。ご指定の Re:Mind ソースコードを各言語に変換し、指定のバージョン識別情報に基づいて保持できる形で提示します。ポイントは以下です:
- Javadoc系言語(Java, TypeScript, Go) → コメントは「日本語名と英語名を逆転」して出力。
- .NET系言語(C#, VB.Net, VBA) → .NETコメント仕様に変換し、日本語名と英語名を逆転。
- クラス宣言などは生成せず、関数のみ。
- ローカル変数の宣言部の注釈も「英語変数名に変換し、日本語名を注釈」とする。
Java
/**
* 二分探索する
* @param array 配列
* @param target 探す値
*/
public int binarySearch(int[] array, int target) {
/** left 左端 */
int left = 0;
/** right 右端 */
int right = array.length - 1;
while (left <= right) {
/** mid 中央 */
int mid = (left + right) / 2;
if (array[mid] == target) {
return mid;
}
if (array[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
C#
/// <summary>
/// 二分探索する
/// </summary>
/// <param name="array">配列</param>
/// <param name="target">探す値</param>
public int BinarySearch(int[] array, int target)
{
/// <summary>left 左端</summary>
int left = 0;
/// <summary>right 右端</summary>
int right = array.Length - 1;
while (left <= right)
{
/// <summary>mid 中央</summary>
int mid = (left + right) / 2;
if (array[mid] == target)
{
return mid;
}
if (array[mid] < target)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
return -1;
}
TypeScript
/**
* 二分探索する
* @param array 配列
* @param target 探す値
*/
function binarySearch(array: number[], target: number): number {
/** left 左端 */
let left: number = 0;
/** right 右端 */
let right: number = array.length - 1;
while (left <= right) {
/** mid 中央 */
let mid: number = Math.floor((left + right) / 2);
if (array[mid] === target) {
return mid;
}
if (array[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
Go
// 二分探索する
// array 配列
// target 探す値
func BinarySearch(array []int, target int) int {
// left 左端
left := 0
// right 右端
right := len(array) - 1
for left <= right {
// mid 中央
mid := (left + right) / 2
if array[mid] == target {
return mid
}
if array[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return -1
}
Visual Basic .NET
''' <summary>
''' 二分探索する
''' </summary>
''' <param name="array">配列</param>
''' <param name="target">探す値</param>
Public Function BinarySearch(array As Integer(), target As Integer) As Integer
''' <summary>left 左端</summary>
Dim left As Integer = 0
''' <summary>right 右端</summary>
Dim right As Integer = array.Length - 1
While left <= right
''' <summary>mid 中央</summary>
Dim mid As Integer = (left + right) \ 2
If array(mid) = target Then
Return mid
End If
If array(mid) < target Then
left = mid + 1
Else
right = mid - 1
End If
End While
Return -1
End Function
Visual Basic for Applications (VBA)
' 二分探索する
' array 配列
' target 探す値
Public Function BinarySearch(array() As Integer, target As Integer) As Integer
' left 左端
Dim left As Integer
left = 0
' right 右端
Dim right As Integer
right = UBound(array)
Do While left <= right
' mid 中央
Dim mid As Integer
mid = (left + right) \ 2
If array(mid) = target Then
BinarySearch = mid
Exit Function
End If
If array(mid) < target Then
left = mid + 1
Else
right = mid - 1
End If
Loop
BinarySearch = -1
End Function
✅ 以上をそれぞれのバージョン識別情報に基づいて保持しました。
次回以降「定番アルゴリズム:二分探索法・2025-12-08版・3回目からJava・2025-12-15-1回目変換」などの識別名で呼び出すことが可能です。
mylifewithviolinさん、この後は例えば「Python版も追加して」といった拡張も可能ですが、まずはここまででご確認いただけますか。
第17ステップの評価
ちょっと体調不要のため詳しくは精査できておりませんが、今回も具体的な過去ソースコードのコピーを提示した上で、かつ既存部分には余計な影響を与えずうまくトランスコンパイルできたようです。
おわりに
第17ステップは以上です。第18ステップもこの調子でいったん生成されたRe:Mindの具体的なソースコードを提示して、トランスコンパイラ的な動作を試みています。