自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(19))
MonIter コードから Python コードに変換
Python コードについては「自由モノイドのイテレーター(9) - エレファント・ビジュアライザー調査記録」を参照してください。
引数で渡すバージョン
MonIter のコード
def fib(x, y) = x & fib(y, x + y);
fib(0, 1)を Python のコードに変換するには以下のようにします。
/// <summary> /// フィボナッチ数列 Python コード出力(引数あり) /// </summary> /// <returns>フィボナッチ数列の Python コード</returns> private string InfiniteFibpnacciPrmsPythonCode() { string src = "def fib(x, y) = x & fib(y, x + y); fib(0, 1)"; Prog prog = MonParser.ParseProg(src); Func<string, string> perf = x => $"print(take({GetCount()}, {x}))"; return prog.GeneratePython(true, perf); }
結果は以下のようになります。
def fib(x, y): yield x yield from fib(y, x + y) print(take(20, fib(0, 1)))
Zip を使うバージョン
MonIter のコード
def fib(x, y) = x & y & $zipsum(fib(x, y), $tail(fib(x, y)));
fib(0, 1)を Python のコードに変換するには以下のようにします。
/// <summary> /// フィボナッチ数列 Python コード出力(Zip) /// </summary> /// <returns>フィボナッチ数列の Python コード</returns> private string InfiniteFibpnacciZipPythonCode() { string src = "def fib(x, y) = x & y & $zipsum(fib(x, y), $tail(fib(x, y))); fib(0, 1)"; Prog prog = MonParser.ParseProg(src); Func<string, string> perf = x => $"print(take({GetCount()}, {x}))"; return prog.GeneratePython(true, perf); }
結果は以下のようになります。
def fib(x, y): yield x yield y yield from zipsum(fib(x, y), tail(fib(x, y))) print(take(20, fib(0, 1)))





