gpt4 book ai didi

ocaml - 比较适用于所有类型吗?

转载 作者:行者123 更新时间:2023-12-02 01:24:45 27 4
gpt4 key购买 nike

让我们考虑一个类型 t 和两个 t 类型的变量 x,y

调用compare x y对于任何类型t都有效吗?我找不到任何反例。

最佳答案

多态 compare 函数的工作原理是递归地探索值的结构,提供 OCaml 值的临时总排序,用于定义由多态测试的结构相等 = 运算符。

正如 @antron 所观察到的那样,根据设计,它没有在函数和闭包上定义。该定义的递归性质意味着结构相等不是在包含函数或闭包的值上定义的。这种递归性质还意味着 compare 函数不是在递归值上定义的,正如 @antron 所提到的。

结构相等,因此 compare 函数和比较运算符不知道结构不变量,并且不能用于比较(轻度)高级数据结构,例如 Sets、Maps、HashTbls 等在。如果需要对这些结构进行比较,就必须编写专门的函数,这就是Set和Map定义这样一个函数的原因。

在定义自己的结构时,一个好的经验法则是区分

  • 具体类型,仅根据原始类型和其他具体类型进行定义。具体类型不应该用于其处理需要一些不变量的结构,因为很容易创建破坏这些不变量的这种类型的任意值。对于这些类型,多态比较函数和运算符是合适的。

  • 抽象类型,其具体定义是隐藏的。对于这些类型,最好提供专门的比较函数。 mixture library定义了 compare mixin可用于从专用 compare 函数的实现中派生比较运算符。它的使用在 README 中有说明。 .

关于ocaml - 比较适用于所有类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34513998/

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