cul*_*tau 2 ocaml operators comparison-operators
我很好奇大于(>)和小于(<)运算符如何处理OCaml中不是int,float或double的类型.
例如,我能够发现字符串"a">"b"但是有一些参考列出了所有非数字数据类型的约定.此外,这些运算符如何跨类型工作?例如,"a">是真还是"a"<真?
最后,这些如何在用户定义的数据类型中工作?
谢谢!
OCaml的<,>,<=,>=运营商只能用相同类型的两个值工作,因此表达"a" > true是无效的.但是,它们适用于所有类型(下面有警告).您可以在Pervasives模块中找到这些运算符的定义.
这些运算符的顺序仅针对简单值(整数,字符,字符串,字节序列和浮点)定义.在这些情况下,文档说它们给出了"通常的顺序".
字符串和字节序列的通常排序是字典顺序.对于字符串,案例很重要.
对于复合值,订单仅保证与=一致排序一致并且是一致的排序.
据我所知,没有为简单的用户定义类型定义顺序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 ))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |