一个听起来复杂,但在简单的谷歌搜索中没有好的解释的术语...还有没有更多学术方向的人能够解释这个?
关系参数性似乎是一个函数抽象化类型的属性(比如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
两个答案大部分都是正确的。我会说参数性是多态性的可能属性。如果多态术语在所有实例化下表现相同,则多态性是参数化的。 “表现相同”是一个模糊的,直观的术语。约翰·雷诺兹引入了关系参数化作为这个数学形式化的一个。它声明多态术语保留所有关系,直观地迫使它表现相同。
Consider f: a list -> a list. If we have the relation a~1, b~2, c~3, ..., then we can lift it to lists and hav e.g. [a, d, b, c] ~ [1, 4, 2, 3]
Now, if f([a, d, b, c]) = [c, b, d, a] and f preserves relations, then f([1, 4, 2, 3]) = [3, 2, 4, 1]. In other words, if f reverses list of strings, it also reverses lists of numbers.
因此,在关系参数化的多态函数中,无法“检查类型参数”,即它们无法根据类型改变其行为。
关系参数化是一种技术,用于证明任何完全参数化的代码都将满足某些法律。
“全参数”代码是具有类型参数的函数,其参数仅使用这些类型参数进行了类型化,并且其代码是纯函数式的,不尝试在运行时检查分配给类型参数的类型。代码必须将所有类型视为完全未知。
在这些限制下,代码将满足某种法律,大多数情况下这将是“自然性”法律,但在某些情况下,法律将更加复杂。“免费的定理”一文展示了许多这样的法律示例。
为了证明这些定律总是成立,人们使用关系参数化技术。这是一种复杂而强大的技术,在其中将函数(视为一对多二元关系)替换为任意(多对多)二元关系,然后使用关系重新制定自然性律。结果是一个“关系自然性律”。最后,人们再次将关系替换为函数并尝试推导出一个方程。
我最近录制了一篇关于关系参数性的教程,其中包含Scala的代码示例。 https://www.youtube.com/watch?v=Jf2VFB90Q0s&list=PLcoadSpY7rHUO0I1zdcbu9EeByYbwPSQ6
好的,我在这里只是要猜一个完全的猜测,基于这个。
将此翻译成中文:http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4276578 http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4276578
我会说这是参数多态性(泛型)的数学表示。
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding