首页 > 解决方案 > OCaml,使用 < > = 运算符比较 int 列表

问题描述

问题:

使用 <、>、= 比较 int 列表背后的逻辑是什么?'a 列表呢?

代码:

# let x = [1] > [1] val x : bool = false

# let x = [1;2] > [1] val x : bool = true

# let x = [1;2] > [2;1] val x : bool = false

# let x = [true;false] < [true;true] val x : bool = true

跟进问题:

标签: listtypescomparisonoperatorsocaml

解决方案


ocaml 列表表示为

type 'a my_list = Nil | Cons of 'a * 'a my_list

Nil 构造函数表示为值为 0 的整数,而 Cons 是指向具有标记 0 和 2 字段的块的指针。

< > = 运算符考虑 Nil < 缺点。因此,如果列表的长度不同,则较短的列表会更小。

比较总是在相同类型之间进行,因此无法比较不同类型的列表(没有 Obj.magic)。


推荐阅读