構文要素に対応するクラス(Definition クラス:関数定義)
<summary>
</summary>
internal class Definition : Statement
{
<summary>
</summary>
private readonly Identifier name;
<summary>
</summary>
private readonly IEnumerable<ParameterName> list;
<summary>
</summary>
private readonly Expression exp;
public Definition(Identifier name, IEnumerable<ParameterName> list, Expression exp)
{
this.name = name;
this.list = list;
this.exp = exp;
}
<summary>
</summary>
internal string Name => name.Name;
<summary>
</summary>
internal IEnumerable<ParameterName> ParamList => list;
<summary>
</summary>
internal Expression Exp => exp;
<summary>
</summary>
<param name="env"></param>
<param name="prog"></param>
<returns></returns>
public FreeMonoid<int> Eval(Env<FreeMonoidUnion> env, Prog prog)
{
return FreeMonoid<int>.Zero;
}
<summary>
</summary>
<returns></returns>
public string Print()
{
string prms = string.Join(", ", list.Select(x => x.Print()));
return $"def {name.Print()}({prms}) = {exp.Print()}";
}
<summary>
</summary>
<param name="yieldp"></param>
<param name="typep"></param>
<param name="indp"></param>
<param name="indcount"></param>
<param name="perf"></param>
<returns></returns>
public string GeneratePython(bool yieldp, bool typep, bool indp, int indcount, Func<string, string> perf)
{
return $"def {name.Print()}(" + Prog.ListGeneratePython(yieldp, typep, indp, indcount, perf, ", ", list) + $"):\r\n{exp.GeneratePython(true, typep, true, indcount + 1, perf)}";
}
<summary>
</summary>
<param name="yieldp"></param>
<param name="typep"></param>
<param name="indp"></param>
<param name="indcount"></param>
<param name="perf"></param>
<returns></returns>
public string GenerateCS(bool yieldp, bool typep, bool indp, int indcount, Func<string, string> perf)
{
string typename = "IEnumerable<int>";
return $"{typename} {name.Print()}(" + Prog.ListGenerateCS(yieldp, typep, indp, indcount, perf, ", ", list) + ")\r\n" + Prog.GenerateCSBlock(indcount, false, exp.GenerateCS(true, typep, true, indcount + 1, perf) + "\r\n");
}
}
