我已经阅读了一些有关评估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) { }
}
Lambda表达式与lambda演算无关。表示法相似,语义-完全不同。
实际上,C#lambda表达式只是函数的较短形式。lambda链实际上是方法链。发生什么情况取决于上下文。
无需搜索类比,只需遵循语义规则编写标准的lambda演算解释器即可。这应该是简单的学术级任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句