我一直在阅读一些关于评估 lambda 演算的算法(不是解析,而是在解析后进行评估),但到目前为止,所有这些似乎都是你用笔和纸使用的那种方法。我想从头开始用 C# 编写自己的 lambda 演算评估器,并想知道实际程序是如何做到这一点的。
由于 lambda 表达式是 lambda 演算的超集,我想知道如何评估 lambda 表达式的 lambda 演算子集(不关心二元运算或强制转换等)。
我已经上课了,但我不确定如何从这里开始评估:
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) { }
}