gpt4 book ai didi

OCaml 语法 : what does type 'a t mean?

转载 作者:行者123 更新时间:2023-12-03 20:45:43 27 4
gpt4 key购买 nike

这是关于 OCaml 中的类型定义,我发现以下语法令人费解:

type 'a t

在简单的英语中是什么意思?

最佳答案

由于 OP 有 C++ 语言的经验,我认为以下解释可能有用。形式的类型声明:

type 'a t
接近C++
template <typename a> class t;
例如, 'a list是一个通用列表, 'a是元素的一种类型。为简洁起见,我们使用单个 ' , 而不是 template <typename _>构造。在 OCaml 的说法中,我们使用术语“参数多态性”,而不是“泛型编程”。我们说的是类型构造函数,而不是单词模板。后者有一个有趣的结果。就像在 C++ 中模板实例化创建类型的新实例一样,在 OCaml 中,协调多态类型的类型变量会创建新类型,例如 int list , float list (参见, list<int>float<list>)。因此,可以查看类型构造函数 'a list作为类型级别的一元函数,它接受一个类型并创建一个类型。可以有 nary 类型的构造函数,例如 type ('key, 'value) hashtbl是一个二进制类型构造函数,它为给定的 key 创建一个类型和 value一对。此外,我们可以将非参数类型视为空类型构造函数,因此 int构造类型 int .
附言F# 语言,OCaml 的后代,允许以两种形式编写: int tt<int>附言为了防止可能的混淆,我想声明,尽管模板和参数类型试图解决相同的问题,但它们仍然存在一些差异。模板在实例化之后键入,参数类型在之前。所以参数类型 'a t为所有 'a 定义.如果你想创建一个类型变量没有被普遍量化的类型,你可以使用另一种机制——仿函数。它们也非常接近模板,但它们接受类型加类型要求,这是 C++ 术语中的一个概念。这些概念在 OCaml 中的模块类型中被具体化,因此仿函数实际上是模块级别的函数,因为它接受一个模块并产生一个模块。

关于OCaml 语法 : what does type 'a t mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36974203/

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