0
0
テーマ、知りたいこと
生成AIに、ある事柄について意見を聞いたところ、褒められました。どう受け止めて良いか戸惑いましたが、みなさんは、そんな経験はありますか?
背景、状況
生成AIをプログラミング補助に使えるかを調査しようとしました。
まず、ちょっとした課題を作って、それについて意見を求めました。
良い課題と言われたので、模範解答の作成を依頼したところ、割とまともな回答がありました。
とても肯定的な反応があったのですが、何か違和感を感じました。
みなさんは、そんな経験はありますか?
以下、生成AIとのやり取りです。
【私】
以下の問題を作りました。
問題の難易度とおすすめの対象者について意見を下さい。
————————————
下記のコードを使って、モナド則のテストを行って下さい。
各テスト項目の成否がわかる表示をして下さい。
こちらが提供したコードとテスト用コードを1ファイルに納めて下さい。
任意のプログラミング言語で解答しても良いが、その場合は下記のコードを該当のコードに変換の上、解答して下さい。
Javaを使用する場合、テスト用コードはMainクラスのmain()に書いて下さい。
他の言語を使用する場合は、これに準じて下さい。
文献調査、Web検索、生成AIの使用は自由とします。
任意のオンラインコンパイラでコードの動作確認を行なって下さい。
import java.util.function.Function; final class Monad<T> { final T value; Monad(final T value) { this.value = value; } final T getValue() { return value; } final <R> Monad<R> flatMap(final Function<T, Monad<R>> f) { return f.apply(value); } }
【生成AI】
素晴らしい問題ですね!この問題は、モナドに関する基本的な理解を試すのに適しています。ただし、モナドについての事前知識があることが前提となります。プログラミング言語や関数型プログラミングの経験がある人に向けた問題と言えます。この問題は中級から上級レベルとして位置付けられます。
【私】
模範解答を作成して下さい。
動作確認は、こちらで実施します。
【生成AI】
問題の要件に基づいて、モナド則のテストを行う模範解答を提供します。以下は、Java言語を使用した解答例です。
import java.util.function.Function; final class Monad<T> { final T value; Monad(final T value) { this.value = value; } final T getValue() { return value; } final <R> Monad<R> flatMap(final Function<T, Monad<R>> f) { return f.apply(value); } } public class Main { public static void main(String[] args) { // モナド則のテスト用関数 Function<Integer, Monad<Integer>> f = x -> new Monad<>(x * 2); Function<Integer, Monad<Integer>> g = x -> new Monad<>(x + 3); Monad<Integer> monad = new Monad<>(5); // 左恒等性のテスト Monad<Integer> leftIdentityResult = monad.flatMap(x -> new Monad<>(x)); boolean leftIdentityTest = leftIdentityResult.getValue().equals(monad.getValue() * 1); System.out.println("Left Identity Test: " + leftIdentityTest); // 右恒等性のテスト Monad<Integer> rightIdentityResult = monad.flatMap(f); boolean rightIdentityTest = rightIdentityResult.getValue().equals(f.apply(monad.getValue()).getValue()); System.out.println("Right Identity Test: " + rightIdentityTest); // 結合法則のテスト Monad<Integer> associativityResult1 = monad.flatMap(f).flatMap(g); Monad<Integer> associativityResult2 = monad.flatMap(x -> f.apply(x).flatMap(g)); boolean associativityTest = associativityResult1.getValue().equals(associativityResult2.getValue()); System.out.println("Associativity Test: " + associativityTest); } }
このコードは、モナド則のテストを行うための Main クラスを提供しています。左恒等性、右恒等性、および結合法則の各テストが行われ、その結果が表示されます。模範解答として、このコードを提供します。
【私】
正常に動作しました。
【生成AI】
素晴らしいです!問題と模範解答が正常に動作したようで良かったです。他に何か質問があればお気軽にどうぞ。
回答4件
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。