true 还是 "a" , =运算符仅适用于相同类型的两个值,因此-6ren">
gpt4 book ai didi

operators - OCaml 运算符 < 和 > 如何处理非整数类型?

转载 作者:行者123 更新时间:2023-12-02 07:26:14 26 4
gpt4 key购买 nike

我很好奇大于 (>) 和小于 (<) 运算符如何处理 OCaml 中非 int、float 或 double 的类型。

例如,我能够发现字符串“a”>“b”,但是否有一些引用列出了所有非数字数据类型的约定。此外,这些运算符如何跨类型工作?例如"a"> true 还是 "a"< true?

最后,这些如何跨用户定义的数据类型工作?

谢谢!

最佳答案

OCaml < , > , <= , >=运算符仅适用于相同类型的两个值,因此表达式 "a" > true是无效的。但是,它们适用于所有类型(下面有警告)。您可以在 Pervasives 中找到这些运算符的定义。模块。

这些运算符的顺序仅为简单值(整数、字符、字符串、字节序列和 float )定义。在这些情况下,文档说他们给出“通常的顺序”。

字符串和字节序列的通常顺序是字典顺序。对于字符串,区分大小写。

对于复合值,顺序只保证与=一致并保持一致的顺序。

据我所知,没有为简单的用户定义类型定义顺序,例如 type abc = A | B | C .我没想到会是这样,但这是我在文档中看到的。实际上,常量构造函数的值如 A , B , C , 将按照声明的顺序排序,第一个值最小。

我也没有看到 false 之间顺序的定义和 true .同样,这令人惊讶。在实践中,false小于 true .

值得注意的是,循环值之间的比较并不能保证终止。此外,比较包含函数的值可能会引发异常。这些可能会导致意想不到的问题,有时甚至是严重的问题。

$ ocaml
OCaml version 4.02.1

# (+) < (+);;
Exception: Invalid_argument "equal: functional value".
# let rec cycle = 1 :: cycle;;
val cycle : int list = [1; <cycle>]
# cycle < cycle;;
(( Does not terminate ))

关于operators - OCaml 运算符 < 和 > 如何处理非整数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152244/

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