2013-11-14 165 views
2

我一直在閱讀一些關於算法的lambda演算(不解析,只是在解析之後進行評估),但到目前爲止,它們看起來都是你用筆和紙做的一種方法。我想從頭開始用C#編寫我自己的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) { } 
} 
+6

你對這裏的答案有什麼期待? –

+0

@AustinSalonen你是什麼意思?我的問題不是很清楚嗎?我至少大概知道用什麼樣的算法來評估lambda表達式。 – Juan

+0

這個問題可能會在http://programmers.stackexchange.com/ – CDspace

回答

3

Lambda表達式是不相關的演算。符號是相似的,語義 - 完全不同。

實際上,C#lambda表達式只是函數的較短形式。實際上,拉姆達達鏈是一系列的方法。它發生了什麼,取決於上下文。

而不是搜索類比,只需編寫標準的lambda演算解釋器,遵循語義規則。這應該是輕鬆的學術水平任務。

+0

據我所知,你可以把任何lambda微積分表達式變成一個C#lambda表達式(在C#中你有變量,應用程序和抽象)。所以評估C#lambda表達式的能力意味着能夠評估lambda演算。如果lambdas是方法,那麼我想將lambda轉換爲C#方法(無論C#方法是什麼)是一種評估lambda演算的方法,並且是我的問題的潛在答案。我錯過了什麼嗎? – Juan

+0

如果你想到**鍵入** lambda微積分,那麼你至少可以嘗試。但是,無類型的lambda演算將不適合C#lambda。 –