我在看报纸Generics of a Higher Kind,第一句是
利用Java 5和C# 2.0,在主流面向对象编程语言中以泛型的名义引入了一阶参数多态性。
我不知道什么是一阶参数多态,我也不太明白什么是一阶函数,我知道高阶函数是接受一个函数并返回一个函数的函数,但是我不知道什么是零阶函数,一阶函数。我从这里那里看到了这样的解释:
F -> g是零阶 F -> g -> h是一阶 F -> g -> h -> i为二阶 等。
有人能给我解释一下这两个术语吗?
发布于 2011-03-19 16:16:35
对于高阶(也称高级类型)参数多态,所以最初值有类型,类型现在有类型,如果将参数类型看作类型函数(类型的函数),例如IEnumerable<T>是类型* -> *的类型函数,当您将类型应用到该类型函数时,就会得到一种类型*。因此,以参数类型(类型构造函数)作为类型函数的观点,我们可以开始讨论高阶类型函数,一种可以以/返回类型函数为参数的类型函数。这被称为更高类型的多态,并且在诸如Java和C#这样的语言中缺乏高表现力的类型系统特性。如果您了解C++模板,那么就会通过模板模板参数(是模板模板),对这样的东西提供有限但不一致和几乎无用的支持。
您可能会想,为什么有这样的特性会有用呢?它们允许表示更高层次的抽象和更通用的代码,比如Monads和函子。标准Haskell98支持更高类型的多态性。
对于一阶函数示例,首先您必须理解lambda微积分中的所有函数只使用一个参数,并且示例中的箭头实际上与右关联,因此这是您实际拥有的:
F -> g是零阶。F -> (g -> h)是一阶函数,函数返回一个函数。F -> (g -> (h -> i))是二阶函数,函数返回返回函数的函数。
同样的“一个参数”也适用于类型、类别、排序(有排序)函数。
https://stackoverflow.com/questions/5363069
复制相似问题