C#如何评估lambda表达式?

时间:2013-11-14 17:45:19

标签: c# lambda evaluation lambda-calculus

我一直在阅读一些关于评估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) { }
}

1 个答案:

答案 0 :(得分:3)

Lambda表达式与lambda演算无关。符号是相似的,语义 - 完全不同。

实际上,C#lambda表达式只是更短的函数形式。 lambdas链实际上是一系列方法。它会发生什么,取决于具体情况。

不是搜索类比,而是按照语义规则编写标准的lambda演算解释器。这应该是容易学术水平的任务。