技術屋にゃん兵衛のてくてくらぼ by データウィズ [DataWith]

気の向くままソフトについて書いてます。バリバリエンジニアではないのであくまでも初心者目線で。

ChatGPTでWolfram言語のコードをGo言語に変換できるか

ChatGPTでWolfram言語のコードをGo言語に変換できるか

 

以前に、MathematicaのコードをPythonに変換できるか実験しました。

で、前回、Go言語の環境を作ったので、さっそく試してみます。

 

ただ、コマンドベースでの変換なので、グラフの表示などができないのは仕方がないということで。

比較のために以前と同じコードを使います。

(以下、入力部分は「Wolframドキュメントセンター」より引用、応答部分は「ChatGPT」からの応答です)

 

前回と同様、まずは、ChatGPTに「これから入力するMathematicaコードをPythonに変換してね」と伝えます。

(以前にやった私のチャットの情報は残った状態でやりますので、人によっては違う回答をよこしてくるかもしれません。)

 

入力>

Convert the following Mathematica code to Go language:

 

応答>

Certainly! Please provide the Mathematica code you'd like to convert to Go, and I'll do my best to help you with the conversion.

 

「ベストを尽くします」というのは前回と同じなので、このあたりは変換などの時には常に前置きをするんでしょうね。「万能じゃないよ。責任持たないよ」って。

 

 

入力>

Coefficient[(x + 1)^3, x, 2]

 

出力は…

----------------------------------------------

The Mathematica code you provided calculates the coefficient of the term with degree 2 in the expansion of (�+1)3(x+1)3. In Go, you can achieve a similar result by expanding the expression and then extracting the coefficient. Here's a simple Go program that does that:

 

package main

 

import (

              "fmt"

              "math/big"

)

 

func binomialCoefficient(n, k int64) *big.Int {

              if k < 0 || k > n {

                            return big.NewInt(0)

              }

 

              if k == 0 || k == n {

                            return big.NewInt(1)

              }

 

              result := new(big.Int)

              result.Binomial(n, k)

              return result

}

 

func coefficientOfTerm(exp, variable, degree int64) *big.Int {

              return binomialCoefficient(exp, degree)

}

 

func main() {

              // Coefficient of x^2 in the expansion of (x + 1)^3

              result := coefficientOfTerm(3, 2, 2)

              fmt.Printf("Coefficient: %s\n", result.String())

}

 

This program defines a function coefficientOfTerm that calculates the coefficient using the binomial coefficient formula. The main function then calls this function for the specific example you provided.

Note: In Go, the big package is used for arbitrary-precision arithmetic to handle larger coefficients. The result is printed as a string for better precision.

----------------------------------------------

いつも通り少し解説があるんですが、「Note」が気になります。なので訳出してみると、、、

「Goでは、大きな係数を処理するための任意制度演算には、大きなパッケージが必要になります。結果は、より良い精度のために文字列として出力されます」

とのこと。

 

あと、なんとなくGo言語のコードがPythonに比べてとても長い印象。Pythonの時は5行だった。

数式処理用のライブラリがないのか。いまのところGo言語ではこの分野はあまり得意ではないのかもしれないです。

 

じゃあ、これをVisual Studio Codeにコピーして、実行してみましょうか。

ファイル名は「Go_Calc_Sample_1.go」としました。

Visual Studio Codeにコードをコピー

あと、「go.mod」の生成もいるので、Windowsのコマンドラインで、次を実行します。

C:\[Goプログラムがあるフォルダー]> go mod init Go_Calc_Sample_1.gp

簡単なコードですから、デバッグはしないので、いきなり実行します。出力を表示するために、「デバッグコンソール」を開いておきます。

「デバッグコンソール」を開く

「実行」->「デバッグなしで実行」を選択します。

デバッグなしで実行

デバッグコンソールには次のように正しく「3」が返ってきました。

実行結果の「3」が返ってきた

デバッグをスキップしているのにデバッグコンソールに出てくるのはいまいちかなあ、と思いますが、どこかに設定があるんでしょうね。