2

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

1 回答 1

3

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

事实上,C# lambda 表达式只是更短的函数形式。一个 lambda 链实际上是一个方法链。它会发生什么,取决于上下文。

无需寻找类比,只需编写一个标准的 lambda 演算解释器,遵循语义规则。这应该是简单的学术水平任务。

于 2013-11-14T18:18:03.380 回答