非専門的シンギュラリティー研究所

無限に動き続けるシステムを表す方法を AI なども使って考えていきます。

自由モノイドのイテレーター(37)

自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(21))

MonIter コードから C# コードに変換して実行

「Roslyn for Scripting」で C# のコードを実行します。「自由モノイドのイテレーター(13) - エレファント・ビジュアライザー調査記録」に少しだけ説明を書いています。

自由モノイドのイテレーター(30) - エレファント・ビジュアライザー調査記録」と同様に「Microsoft.CodeAnalysis.CSharp.Scripting」をインストールして

using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;

と書くと使うことができます。

以下のようにすると C# コードを実行することができます。

        /// <summary>
        /// C# コードを実行する
        /// </summary>
        /// <param name="src">C# コード</param>
        /// <returns>C# コードの結果</returns>
        private string Run(string src)
        {
            try
            {
                var options = ScriptOptions.Default.AddReferences("System.Core").AddImports("System", "System.Collections.Generic", "System.Linq");
                var script = CSharpScript.Create(src, options);
                var result = script.RunAsync().Result;
                return result.ReturnValue.ToString();
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
        }
引数で渡すバージョン

MonIter のコードを C# のコードに変換して実行するには以下のようにします。InfiniteFibpnacciPrmsCSCode() は前回説明した MonIter のコードを C# のコードに変換する関数です。

        /// <summary>
        /// フィボナッチ数列 C# コードに変換して実行(引数あり)
        /// </summary>
        /// <returns>フィボナッチ数列の文字列</returns>
        private string InfiniteFibpnacciPrmsCSRun()
        {
            string src = InfiniteFibpnacciPrmsCSCode();
            return Run(src);
        }
Zip を使うバージョン

MonIter のコードを C# のコードに変換して実行するには以下のようにします。InfiniteFibpnacciZipCSCode() は前回説明した MonIter のコードを C# のコードに変換する関数です。

        /// <summary>
        /// フィボナッチ数列 C# コードに変換して実行(Zip)
        /// </summary>
        /// <returns>フィボナッチ数列の文字列</returns>
        private string InfiniteFibpnacciZipCSRun()
        {
            string src = InfiniteFibpnacciZipCSCode();
            return Run(src);
        }