是否有蹦床类的名称?

时间:2017-01-25 09:40:21

标签: programming-languages

我正在设计一种编程语言,而我想要添加的一项功能是trampoline functionclass之间的交叉。也就是说,一个类似于generic class接受type的文字的类。我之所以坚持这个名字是因为我之前还没有用过某种语言,有什么东西已经意味着这个概念还是一些接近的东西?使用trampoline class是一个选项,但是如果有更准确地描述这个或已经在另一种语言中使用的东西,我宁愿选择它来减少所需的术语数量在文档中。

如果从上面不清楚的话,下面是伪代码来说明这个原理:

class Point<const int n> {
    private float[n] _value;
    Point() {
        for (int i = 0; i < n; i++) {
            this._value[i] = 0f;
        }
    }
    Point(Point<o> other) {
        for (int i = 0; i < min(n, o); i++) {
            this._value[i] = 0f;
        }
    }
    public static float operator [index] (optional float value = null) {
        if (value != null) { this._value[index] = value; }
        return (this._value[index]);
    }
    public static Point<max(o, p)> operator + (Point<const int o> p1, Point<const int p> p2) {
        Point<min(o, p)> small = (p1.n < p2.n ? p1 : p2);
        Point<min(o, p)> large = (p1.n < p2.n ? p2 : p1);
        Point<max(o, p)> ret = new Point<max(o, p)>(large);
        for (int i = 0; i < min(o, p); i++) { ret[i] += small[i] }
        return (ret);
    }
}

1 个答案:

答案 0 :(得分:1)

您正在寻找的术语是dependent types。这意味着类型不仅可以具有类型参数(如泛型),而且类型也可以使用任意值(依赖类型参数)进行参数化。例如,您可以定义一个带有数字n的函数的签名,并返回一个长度为 if (window.localStorage.getItem("notVisited") == null){ //This initilizes a variable in localstorage window.localStorage.setItem("notVisited","true"); } var startListening = function() { myFirebase.on('child_added', function(snapshot) { var msg = snapshot.val(); var msgUsernameElement = document.createElement("b"); msgUsernameElement.textContent = msg.user; var msgTextElement = document.createElement("p"); msgTextElement.textContent = msg.message; var msgElement = document.createElement("div"); msgElement.appendChild(msgUsernameElement); msgElement.appendChild(msgTextElement); document.getElementById("messages").append(msgElement); }); window.localStorage.setItem("notVisited","false"); } if (window.localStorage.getItem("notVisited") == "true") { startListening(); } 的数组。

可悲的是,依赖类型检查通常是不可判定的。这是因为在执行类型检查本身时,您必须计算相关类型参数的可能值的范围。要实际键入检查程序,您必须检查两段代码是否产生相同范围的可能值。这被称为扩展函数相等,这是已知通常不可判定的部分。

现在,如果只将编译时常量用作依赖类型参数,则依赖类型检查可能是可判定的。但是,我不确定。

在下面的评论中,我们发现似乎是依赖类型参数的部分实际上不应该用于类型检查。相反,它可以被视为一个隐含参数。它类似于Scala编程语言中的隐式参数传递。