Scala 一阶参数多态性与一阶函数
我正在读一篇论文,第一句话是 使用Java 5和C#2.0,一阶 引入参数多态性 在主流的面向对象技术中 名称下的编程语言 非专利药 我不知道什么是一阶参数多态性,我也不太了解什么是一阶函数,我知道高阶函数是接受函数并返回函数的函数,但我不知道什么是零阶函数,一阶函数。 我看到了这样一个解释:Scala 一阶参数多态性与一阶函数,scala,functional-programming,lambda-calculus,Scala,Functional Programming,Lambda Calculus,我正在读一篇论文,第一句话是 使用Java 5和C#2.0,一阶 引入参数多态性 在主流的面向对象技术中 名称下的编程语言 非专利药 我不知道什么是一阶参数多态性,我也不太了解什么是一阶函数,我知道高阶函数是接受函数并返回函数的函数,但我不知道什么是零阶函数,一阶函数。 我看到了这样一个解释: f->g是第零阶f->g-> h是第一个订单f->g->h->i 是二等的等 有人能给我解释一下这两个术语吗?对于高阶(又称高阶)参数多态性,首先值有一个类型,现在类型有一个类型,如果你把参数类型看作是类
f->g是第零阶
f->g-> h是第一个订单
f->g->h->i 是二等的
等
有人能给我解释一下这两个术语吗?对于高阶(又称高阶)参数多态性,首先值有一个类型,现在类型有一个类型,如果你把参数类型看作是类型函数的排序(类型的函数),例如
IEnumerable
是类型函数的一种*->*,当您将一个类型应用于此类型函数时,您将得到一个类型*。因此,在将参数类型(类型构造函数)视为类型函数的情况下,我们可以开始讨论高阶类型函数,一种可以接受/返回类型函数作为参数的类型函数。这就是所谓的高级多态性,它是Java&C等语言中缺乏的高度表达型系统特性。如果你了解C++模板,那么通过模板模板参数(是模板模板),有一个有限但不一致且几乎无用的支持。
你可能想知道为什么有这样一个功能会有用?它们允许人们表达更高层次的抽象和更通用的代码,比如单子和函子。标准Haskell 98支持更高种类的多态性
对于一阶函数示例,首先您必须了解lambda演算中的所有函数只接受一个参数,并且示例中的箭头实际上向右关联,因此这就是您实际拥有的:
f->g是第零阶。
f->(g->h)是第一个顺序,函数返回一个函数。
f->(g->(h->i))是二阶函数,函数返回一个函数,该函数返回一个函数
相同的“仅一个参数”也适用于类型、种类、排序(种类具有排序)函数