2008-11-11 34 views
7

Một thuật ngữ phức tạp, không có giải thích tốt từ một tìm kiếm google đơn giản ... có bất kỳ dân gian theo định hướng học thuật nào có thể giải thích điều này không?Tham số quan hệ là gì?

Trả lời

2

Tham số quan hệ dường như là thuộc tính mà một hàm được trừu tượng hóa trên các loại (giống như một generic trong Java) có thể có. Nếu nó có thuộc tính này, nó có nghĩa là nó không bao giờ kiểm tra đối số kiểu của nó hoặc giải mã nó/sử dụng nó theo một cách đặc biệt nào đó. Ví dụ, chức năng "id hoặc inc" ở đây không phải là relationally tham số:

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))); 
    } 
} 

Đầu ra là:

$ java Hey 
11 
10.0 
7

Cả hai câu trả lời hầu hết là đúng. Tôi sẽ nói rằng tham số là một tài sản có thể có của đa hình. Và đa hình là tham số nếu các thuật ngữ đa hình hoạt động giống nhau trong tất cả các instantiations. Để "cư xử giống nhau" là một thuật ngữ mơ hồ, trực quan. Reletricity quan hệ đã được giới thiệu bởi John Reynolds như là một chính thức toán học này. Nó nói rằng các điều khoản đa hình bảo toàn tất cả các mối quan hệ, mà trực giác buộc nó hoạt động như nhau:

Hãy xem xét f: một danh sách -> một danh sách. Nếu chúng ta có mối quan hệ a ~ 1, b ~ 2, c ~ 3, ..., thì chúng ta có thể nâng nó lên danh sách và ví dụ: [a, d, b, c] ~ [1, 4, 2, 3]

Bây giờ, nếu f ([a, d, b, c]) = [c, b, d, a] và f giữ mối quan hệ, rồi f ([1, 4, 2, 3]) = [3, 2, 4, 1]. Nói cách khác, nếu f đảo ngược danh sách các chuỗi, nó cũng đảo ngược danh sách các số.

Vì vậy, các hàm đa hình tham số liên quan không thể "kiểm tra đối số kiểu", trong đó chúng không thể thay đổi hành vi của chúng dựa trên loại.

Các vấn đề liên quan