ラムダ計算を評価するためのアルゴリズム (解析ではなく、解析後に評価するだけ) について少し読んだことがありますが、これまでのところ、それらはすべてペンと紙で使用するような方法のようです。C# で独自のラムダ計算エバリュエーターをゼロから作成したいと考えており、実際のプログラムでこれを行う方法を知りたいと考えています。
ラムダ式はラムダ計算のスーパーセットであるため、ラムダ式のラムダ計算サブセットがどのように評価されるかを知りたいです (二項演算やキャストなどは気にしないでください)。
私はすでにクラスを持っていますが、ここから評価する方法がわかりません:
public enum TermType { Variable, Application, Abstraction };
public abstract class LambdaTerm
{
public readonly TermType TermType;
protected LambdaTerm(TermType termType)
{
TermType = termType;
}
}
public class LambdaVariable : LambdaTerm
{
public string Name;
public LambdaVariable() : base(TermType.Variable) { }
}
public class LambdaApplication : LambdaTerm
{
public LambdaTerm Function;
public LambdaTerm Parameter;
public LambdaApplication() : base(TermType.Application) { }
}
public class LambdaAbstraction : LambdaTerm
{
public string ArgumentName;
public LambdaTerm Body;
public LambdaAbstraction() : base(TermType.Abstraction) { }
}