在一个独立的 ocaml 程序中断言

assert in one standalone ocaml program

阅读 this thread 后,我将此代码放入我的 .ml 文件中:

let x = [3;5;9]
(* Testing append to the list *)
let () = assert( x @ [2;10] == [3;5;9;2;10])

和运行

$ ocamlc -o BasicList BasicList.ml  && ./BasicList 
Fatal error: exception Assert_failure("BasicList.ml", 3, 9)

阅读 Ocaml 的 documentation

最近Stdlib,你可能想使用=结构相等运算符和代码

 assert( x @ [2;10] = [3;5;9;2;10])

请注意,== 正在编写 物理相等性 运算符("pointers",更准确地说是物理盒装值)。

val (==) : 'a -> 'a -> bool

e1 == e2 tests for physical equality of e1 and e2. On mutable types such as references, arrays, byte sequences, records with mutable fields and objects with mutable instance variables, e1 == e2 is true if and only if physical modification of e1 also affects e2. On non-mutable types, the behavior of ( == ) is implementation-dependent; however, it is guaranteed that e1 == e2 implies compare e1 e2 = 0. Left-associative operator, see Ocaml_operators for more information.

顺便说一句,ocaml 编程语言 has an open source 实现。你应该考虑研究它的源代码。

请注意,与 = 相比,两个长度为 n 的长列表的 time complexityO(n)。但是 == 是常数时间。对于包含数千个不同元素的列表。

作为练习,为列表编写相当于 = 的代码(例如,仅使用 letrecmatch==)。