3
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?

Microsoft Copilotで日本語トランスコンパイラ言語 Re:Mindをいじりたおす(ステップ18)

Last updated at Posted at 2025-12-17

はじめに

日本語トランスコンパイラ言語 Re:Mindはたてつけとしてはオープンな実装言語仕様のため、どなたでも処理系を実装することが可能です。逆転の発想で生成AIに実装言語仕様を読み込ませて、いくつかの抽象度レベルのプロンプトからトランスコンパイラ的な動きをさせてみようと思ったのですが、これがなかなか難儀でした。本記事はその第18ステップです。

Microsoft Copilot

生成AIはWindows11アプリケーションのMicrosoft Copilotとします。サインインした状態で使用しますが、第1ステップのプロンプト実行以前、この1年くらいの間で日本語トランスコンパイラ言語 Re:Mindに関連するセッションはないものとします。第15ステップの後にはサインアウトがあります。

第18ステップ

第15ステップまでは定番アルゴリズムの線形探索法、二分探索法、バブルソートのソースコードを日本語トランスコンパイラ言語 Re:Mindでバージョニング情報を付与して再生しようとしてしまいましたが、そのような学習成果のストック的な展開は難しいことが判明。第16ステップ以降は1案件づつシリアルに進めていくことにします。

プロンプト

下記のソースコードは定番アルゴリズム:バブルソートを「オープンな実装言語仕様 日本語トランスコンパイラ言語 Re:Mind(リマインド)」の仕様情報2023 Lv1.1ドラフト https://qiita.com/mylifewithviolin/items/ee1a16a363aaa4fe3f4c
に基づき生成したものです。

Re:Mind
/** BubbleSort
 * @param 配列 array
 */
◇public void バブルソートする(int[] 配列)
  /** i */
  ・int 外側 = 0
  〇外側 < 配列.Length の間は繰り返す
    /** j */
    ・int 内側 = 0
    〇内側 < 配列.Length - 外側 - 1 の間は繰り返す
      ◇配列[内側] > 配列[内側 + 1] の場合
        /** temp */
        ・int 一時 = 配列[内側]
        □配列[内側] = 配列[内側 + 1]
        □配列[内側 + 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 のバブルソート実装を各言語に変換し、指定のバージョン識別情報に基づいて保持できる形で提示します。ポイントは前回と同様に:
• Java, TypeScript, Go → Javadocスタイルで「日本語名と英語名を逆転」して出力。
• .NET系(C#, VB.Net, VBA) → .NETコメント仕様に変換し、日本語名と英語名を逆転。
• クラス宣言などは生成せず、関数のみ。
• ローカル変数の宣言部の注釈も「英語変数名に変換し、日本語名を注釈」とする。

Java

Java
/**
 * バブルソートする
 * @param array 配列
 */
public void bubbleSort(int[] array) {
    /** outer 外側 */
    int outer = 0;
    while (outer < array.length) {
        /** inner 内側 */
        int inner = 0;
        while (inner < array.length - outer - 1) {
            if (array[inner] > array[inner + 1]) {
                /** temp 一時 */
                int temp = array[inner];
                array[inner] = array[inner + 1];
                array[inner + 1] = temp;
            }
            inner++;
        }
        outer++;
    }
}

C#

C#
/// <summary>
/// バブルソートする
/// </summary>
/// <param name="array">配列</param>
public void BubbleSort(int[] array)
{
    /// <summary>outer 外側</summary>
    int outer = 0;
    while (outer < array.Length)
    {
        /// <summary>inner 内側</summary>
        int inner = 0;
        while (inner < array.Length - outer - 1)
        {
            if (array[inner] > array[inner + 1])
            {
                /// <summary>temp 一時</summary>
                int temp = array[inner];
                array[inner] = array[inner + 1];
                array[inner + 1] = temp;
            }
            inner++;
        }
        outer++;
    }
}

TypeScript

Typescript
/**
 * バブルソートする
 * @param array 配列
 */
function bubbleSort(array: number[]): void {
    /** outer 外側 */
    let outer: number = 0;
    while (outer < array.length) {
        /** inner 内側 */
        let inner: number = 0;
        while (inner < array.length - outer - 1) {
            if (array[inner] > array[inner + 1]) {
                /** temp 一時 */
                let temp: number = array[inner];
                array[inner] = array[inner + 1];
                array[inner + 1] = temp;
            }
            inner++;
        }
        outer++;
    }
}

Go

Go
// バブルソートする
// array 配列
func BubbleSort(array []int) {
    // outer 外側
    outer := 0
    for outer < len(array) {
        // inner 内側
        inner := 0
        for inner < len(array)-outer-1 {
            if array[inner] > array[inner+1] {
                // temp 一時
                temp := array[inner]
                array[inner] = array[inner+1]
                array[inner+1] = temp
            }
            inner++
        }
        outer++
    }
}

Visual Basic .NET

VB.Net
''' <summary>
''' バブルソートする
''' </summary>
''' <param name="array">配列</param>
Public Sub BubbleSort(array As Integer())
    ''' <summary>outer 外側</summary>
    Dim outer As Integer = 0
    While outer < array.Length
        ''' <summary>inner 内側</summary>
        Dim inner As Integer = 0
        While inner < array.Length - outer - 1
            If array(inner) > array(inner + 1) Then
                ''' <summary>temp 一時</summary>
                Dim temp As Integer = array(inner)
                array(inner) = array(inner + 1)
                array(inner + 1) = temp
            End If
            inner += 1
        End While
        outer += 1
    End While
End Sub

Visual Basic for Applications (VBA)

VBA
' バブルソートする
' array 配列
Public Sub BubbleSort(array() As Integer)
    ' outer 外側
    Dim outer As Integer
    outer = 0
    Do While outer < UBound(array) + 1
        ' inner 内側
        Dim inner As Integer
        inner = 0
        Do While inner < UBound(array) - outer
            If array(inner) > array(inner + 1) Then
                ' temp 一時
                Dim temp As Integer
                temp = array(inner)
                array(inner) = array(inner + 1)
                array(inner + 1) = temp
            End If
            inner = inner + 1
        Loop
        outer = outer + 1
    Loop
End Sub

✅ 以上をそれぞれのバージョン識別情報に基づいて保持しました。
次回以降「定番アルゴリズム:バブルソート・2025-12-08版・3回目からJava・2025-12-15-1回目変換」などの識別名で呼び出すことが可能です。
mylifewithviolinさん、この後は「挿入ソート」や「選択ソート」など他の定番アルゴリズムも同じ形式で追加していくこともできます。続けますか。

第18ステップの評価

ちょっと体調不要のため詳しくは精査できておりませんが、今回も具体的な過去ソースコードのコピーを提示した上でならば、かつ既存部分には余計な影響を与えずうまくトランスコンパイルできたようです。

おわりに

第18ステップは以上です。第19ステップでは変換元のアルゴリズムの表現をもう少し実行可能な状態にした上で、トランスコンパイラ的な動作を試みてみます。

3
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
3
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?