gpt4 book ai didi

scala - 一阶参数多态性和一阶函数

转载 作者:行者123 更新时间:2023-12-03 03:08:21 25 4
gpt4 key购买 nike

我正在阅读论文Generics of a Higher Kind,第一句话是

With Java 5 and C# 2.0, first-order parametric polymorphism was introduced in mainstream object-oriented programming languages under the name of generics.

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

f -> g is zeroth order
f -> g -> h is first order
f -> g -> h -> i is second order
Etc.

谁能帮我解释一下这两个术语吗?

最佳答案

对于高阶(又名更高种类)参数多态性,因此第一个值有一个类型,如果您将参数类型视为类型函数(类型的函数),那么类型现在有一个种类,例如 IEnumerable<T> 是kind * -> * 的类型函数,当您将类型应用于此类型函数时,您将获得 kind * 的类型。因此,通过将参数类型(类型构造函数)视为类型函数的观点,我们可以开始讨论高阶类型函数,这是一种可以接受/返回类型函数作为参数的类型函数。这被称为高级多态性,它是 Java 和 C# 等语言所缺乏的高度表达的类型系统功能。如果您了解 C++ 模板,那么通过模板模板参数(是的模板模板)对此类事物的支持有限但不一致且几乎无用。

您可能想知道为什么拥有这样的功能会有用?它们允许人们表达更高层次的抽象和更通用的代码,例如 Monad 和 Functor。标准 Haskell98 支持更高级的多态性。

对于您的一阶函数示例,首先您必须了解 lambda 演算中的所有函数仅采用一个参数,并且示例中的箭头实际上与右侧关联,因此这就是您实际拥有的:

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

同样的“仅一个参数”也适用于 type、kind、sorts(具有排序的种类)函数。

关于scala - 一阶参数多态性和一阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5363069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com