我一直在阅读一些关于评估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) { }
}
答案 0 :(得分:3)
Lambda表达式与lambda演算无关。符号是相似的,语义 - 完全不同。
实际上,C#lambda表达式只是更短的函数形式。 lambdas链实际上是一系列方法。它会发生什么,取决于具体情况。
不是搜索类比,而是按照语义规则编写标准的lambda演算解释器。这应该是容易学术水平的任务。