2013-11-14 2 views
2

저는 람다 미적분 (파싱이 아니라 파싱이 평가되는 것입니다)을 평가하는 알고리즘에 대해 조금 읽었습니다. 그러나 지금까지는 모두 펜과 종이로 사용하는 방법과 비슷했습니다. 나는 처음부터 C#에서 내 자신의 람다 미적분 평가기를 쓰고 싶습니다 그리고 실제 프로그램이 이것을 어떻게하는지 알고 싶습니다.C#은 람다 식을 어떻게 평가합니까?

람다 식은 람다 미적분의 상위 집합이므로 람다 식의 람다 미적분 하위 집합이 어떻게 평가되는지 (이진 연산 또는 형 변환 등은 신경 쓰지 않아도됩니다) 알고 싶습니다.

나는 이미 내 수업을하지만 평가에 여기에서 이동하는 방법을 잘 모르겠어요 :

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 당신은 무엇을 의미합니까? 제 질문이 충분히 명확하지 않습니까? 대략적으로 람다 식을 평가하는 데 어떤 알고리즘이 사용되는지 알고 싶습니다. – Juan

+0

이 질문은 http://programmers.stackexchange.com/ – CDspace

답변

3

람다 표현식 람다 계산법 관련이 없습니다. 표기법은 비슷하지만 의미는 완전히 다릅니다.

사실 C# 람다 식은 함수의 더 짧은 형식입니다. 사실 람다 체인은 일련의 방법입니다. 그 일은 상황에 달려 있습니다.

유추를 검색하는 대신 의미 론적 규칙에 따라 표준 람다 해석기를 작성하면됩니다. 이것은 학업 수준의 쉬운 작업이어야합니다.

+0

제가 이해하는 한, 람다 미적분 표현식을 C# 람다 표현식으로 바꿀 수 있습니다 (C#에서는 변수, 응용 프로그램 및 추상화가 있음). 따라서 C# 람다 표현식을 평가하는 기능은 람다 계산법을 평가할 수있는 능력을 암시합니다. lambda가 메소드라면 lambda를 C# 메소드 (C# 메소드가 무엇이든간에)로 바꾸는 것이 λ 계산법을 평가하는 방법이며 내 질문에 대한 잠재적 인 대답이라고 생각합니다. 내가 놓친 게 있니? – Juan

+0

만약 ** typed ** lambda calculus를 생각한다면 적어도 시도해 볼 수 있습니다. 그러나 유형이 지정되지 않은 람다 미적분은 C# 람다에 맞지 않습니다. –

관련 문제