7

複雑な響きの用語で、単純な Google 検索では適切な説明がありません... これを説明できるアカデミック志向の人は他にいますか?

4

3 に答える 3

7

どちらの答えもほとんど正しいです。パラメトリック性はポリモーフィズムの可能な特性であると言えます。また、ポリモーフィックな用語がすべてのインスタンス化で同じように動作する場合、ポリモーフィズムはパラメトリックです。「同じように振る舞う」というのは、漠然とした直感的な用語です。リレーショナル パラメトリック性は、これの数学的形式化としてジョン レイノルズによって導入されました。それは、ポリモーフィング項がすべての関係を維持することを述べており、直感的に同じように振る舞うように強制します。

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 が文字列のリストを逆にする場合、数値のリストも逆になります。

そのため、リレーショナル パラメトリック多相関数は、型に基づいて動作を変更できないという点で、「型引数を調べる」ことができません。

于 2011-03-20T14:28:08.123 に答える
2

関係パラメトリック性は、型を抽象化した関数 (Java のジェネリックのような) が持つことができるプロパティのようです。このプロパティがある場合は、型引数を検査したり、分解したり、特別な方法で使用したりしないことを意味します。たとえば、次の関数「id or 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
于 2008-11-13T07:55:37.530 に答える
1

さて、これに基づいて、ここで完全な推測を危険にさらすだけです

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

これは、パラメトリック ポリモーフィズム (ジェネリック) の数学的表現だと思います。

于 2008-11-11T08:59:50.367 に答える