相关疑难解决方法(0)

在类型推断中需要"统一"的最简单的例子

我试图了解如何实现类型推断.特别是,我不太清楚"统一"的繁重发挥在何处/为何发挥作用.

我将举一个"伪C#"的例子来帮助澄清:

天真的方式是这样的:

假设您将程序"解析"到表达式树中,以便可以使用以下命令执行:

interface IEnvironment
{
    object lookup(string name);
}

interface IExpression
{
    // Evaluate this program in this environment
    object Evaluate(IEnvironment e);
}
Run Code Online (Sandbox Code Playgroud)

因此,"乘法"之类的东西可以用以下方式实现:

class Multiply : IExpression
{
    IExpression lhs;
    IExpression rhs;
    // etc.
    public object Evaluate(IEnvironment e)
    {
        // assume for the moment C# has polymorphic multiplication
        return lhs.Evaluate(e) * rhs.Evaluate(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后要"实现"类型推断,你可以做类似的事情:

interface ITypeEnvironment
{
    Type getType(string name);
}

interface IExpression
{
    //as before
    object Evaluate(IEnvironment e);
    // infer type
    Type inferType(ITypeEnvironment typeEnvironment);
} …
Run Code Online (Sandbox Code Playgroud)

c# scheme type-inference unification

3
推荐指数
1
解决办法
1631
查看次数

标签 统计

c# ×1

scheme ×1

type-inference ×1

unification ×1