OCaml布尔表达式[[]] == [[]]

Ati*_*kae 8 ocaml expression boolean list

我有一个返回的函数,[[]]我想测试结果作为单元测试.但我发现表达式[[]] == [[]]返回false.这是一个简单的测试代码:

# [[]] == [[]];;
- : bool = false
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么这个表达式被评估为假?

谢谢.

pad*_*pad 13

使用,=因为您具有结构相等性来比较两个值:

# [[]] = [[]];;
- : bool = true
Run Code Online (Sandbox Code Playgroud)

因为==引用相等,所以如果引用相同的内存位置,它只返回true:

let a = [[]]
let b = a

# b == a;;
- : bool = true
Run Code Online (Sandbox Code Playgroud)


Mat*_*ias 9

==OCaml中的操作员意味着"物理平等".但是,您有两个(物理上)不同的列表.也许,你想要"结构平等",经过测试=.

  • `[]` 具有结构和物理相等性(它类似于整数)。它不分配新列表。这是创建新列表的外括号,因为`[[]] = ([] :: [])`。 (2认同)