阅读了 这条 我把这段代码放到了我的 .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。
最近 Stdlib
,你可能想使用 =
结构平等运算符和代码
assert( x @ [2;10] = [3;5;9;2;10])
请注意 ==
是编码的 身体平等 操作符(指针,更准确的说是物理盒装值)。
val (==) : 'a -> 'a -> bool
e1 == e2
测试e1和e2的物理平等。在可变类型上,如引用、数组、字节序列、具有可变字段的记录和具有可变实例变量的对象,如果且仅当e1的物理修改也会影响e2时,e1 == e2为真。在不可变类型上,e1==e2的行为是真。( == )
是依赖于实现的。 然而,它保证e1 == e2意味着比较e1 e2 = 0。 左联运算符,参见Ocaml_operators
以获取更多信息。
顺便说一下 ocaml
编程语言 有 一个 开源 实现。你应该考虑研究它的源代码。
要知道,与 =
两张长长的单子 n 拥有 时间复杂度 的 O(n). 但是... ==
是恒定的时间。对于成千上万个元素的列表来说,这是有区别的。
作为一个练习,请为相当于 =
列表(例如,只使用一个 letrec
, match
和 ==
).