什么是关系参数?

时间:2008-11-11 08:03:36

标签: programming-languages

一个复杂的术语,没有一个简单的谷歌搜索的良好解释......是否有更多的学术导向的人可以解释这个?

3 个答案:

答案 0 :(得分:7)

两个答案大多是正确的。我会说参数化是多态的一种可能属性。如果多态项在所有实例化下表现相同,则多态性是参数化的。 “行为相同”是一个模糊,直观的术语。 John Reynolds引入了关系参数,作为对此的数学形式化。它指出多态术语保留所有关系,直观地迫使它表现相同:

考虑f:列表 - >一个列表。   如果我们有关系a~1,b~2,c~3,...,那么我们可以将它提升到列表中,例如   [a,d,b,c]〜[1,4,2,3]

现在,如果f([a,d,b,c])= [c,b,d,a]和f保持关系,   那么f([1,4,2,3])= [3,2,4,1]。   换句话说,如果f反转字符串列表,它也会反转数字列表。

因此,关系参数化多态函数不能“检查类型参数”,因为它们不能根据类型改变它们的行为。

答案 1 :(得分:2)

关系参数似乎是在类型上抽象的函数(如Java中的泛型)可以具有的属性。如果它具有此属性,则意味着它从不检查其类型参数或解构它/以某种特殊方式使用它。例如,此处的函数“id或inc”不是关系参数:

public class Hey<T>
{
    public T idOrInc(T var)
    {
        if (var instanceof Integer)
            return (T)(new Integer(((Integer)var).intValue()+1));
        return var;
    }
    public static void main(String[] args) {
        Hey<Integer> h = new Hey<Integer>();
        System.out.println(h.idOrInc(new Integer(10)));
        Hey<Double> h2 = new Hey<Double>();
        System.out.println(h2.idOrInc(new Double(10)));
    }
}

输出结果为:

$ java Hey
11
10.0

答案 2 :(得分:1)

好的,基于这个

,这里只会冒一个完整的猜测

http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4276578

我会说它是参数多态(泛型)的数学表示。