首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一阶参数多态与一阶函数

一阶参数多态与一阶函数
EN

Stack Overflow用户
提问于 2011-03-19 15:42:33
回答 1查看 918关注 0票数 2

我在看报纸Generics of a Higher Kind,第一句是

利用Java 5和C# 2.0,在主流面向对象编程语言中以泛型的名义引入了一阶参数多态性。

我不知道什么是一阶参数多态,我也不太明白什么是一阶函数,我知道高阶函数是接受一个函数并返回一个函数的函数,但是我不知道什么是零阶函数,一阶函数。我从这里那里看到了这样的解释:

F -> g是零阶 F -> g -> h是一阶 F -> g -> h -> i为二阶 等。

有人能给我解释一下这两个术语吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-19 16:16:35

对于高阶(也称高级类型)参数多态,所以最初值有类型,类型现在有类型,如果将参数类型看作类型函数(类型的函数),例如IEnumerable<T>是类型* -> *的类型函数,当您将类型应用到该类型函数时,就会得到一种类型*。因此,以参数类型(类型构造函数)作为类型函数的观点,我们可以开始讨论高阶类型函数,一种可以以/返回类型函数为参数的类型函数。这被称为更高类型的多态,并且在诸如Java和C#这样的语言中缺乏高表现力的类型系统特性。如果您了解C++模板,那么就会通过模板模板参数(是模板模板),对这样的东西提供有限但不一致和几乎无用的支持。

您可能会想,为什么有这样的特性会有用呢?它们允许表示更高层次的抽象和更通用的代码,比如Monads和函子。标准Haskell98支持更高类型的多态性。

对于一阶函数示例,首先您必须理解lambda微积分中的所有函数只使用一个参数,并且示例中的箭头实际上与右关联,因此这是您实际拥有的:

F -> g是零阶。F -> (g -> h)是一阶函数,函数返回一个函数。F -> (g -> (h -> i))是二阶函数,函数返回返回函数的函数。

同样的“一个参数”也适用于类型、类别、排序(有排序)函数。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5363069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档