Programming languages 什么是关系参数?

Programming languages 什么是关系参数?,programming-languages,Programming Languages,一个听起来很复杂的词,在一个简单的谷歌搜索中没有很好的解释。。。有没有更多以学术为导向的人可以解释这一点呢?好吧,根据这一点,在这里冒险做一个完整的猜测 我可以说它是参数多态性(泛型)的数学表示。关系参数性似乎是通过类型抽象的函数(如Java中的泛型)可以具有的属性。如果它具有此属性,则表示它从不检查其类型参数或以某种特殊方式解构/使用它。例如,此处的函数“id或inc”不是相关参数: public class Hey<T> { public T idOrInc(T var

一个听起来很复杂的词,在一个简单的谷歌搜索中没有很好的解释。。。有没有更多以学术为导向的人可以解释这一点呢?

好吧,根据这一点,在这里冒险做一个完整的猜测


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

关系参数性似乎是通过类型抽象的函数(如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)));
    }
}

这两个答案基本上都是正确的。我想说参数性是多态性的一个可能属性。如果多态项在所有实例化下的行为相同,则多态性是参数化的。“行为一致”是一个模糊的、直观的术语。约翰·雷诺兹(John Reynolds)引入了关系参数,作为这方面的数学形式化。它指出多态性术语保留所有关系,直观地迫使其行为相同:

考虑f:a list->a list。 如果我们有关系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反转字符串列表,它也反转数字列表

因此,关系参数多态函数不能“检查类型参数”,因为它们不能基于类型改变其行为

$ java Hey
11
10.0