在一个独立的 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)
- 为什么会出现这个错误?
- 是否有其他有效或良好实践的方法来测试我的功能?我阅读的大多数教科书仅在 REPL 中进行演示。我是 Ocaml 的新手,所以很高兴听到您的经验。
阅读 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 complexity 为 O(n)。但是 ==
是常数时间。对于包含数千个不同元素的列表。
作为练习,为列表编写相当于 =
的代码(例如,仅使用 letrec
、match
和 ==
)。
阅读 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)
- 为什么会出现这个错误?
- 是否有其他有效或良好实践的方法来测试我的功能?我阅读的大多数教科书仅在 REPL 中进行演示。我是 Ocaml 的新手,所以很高兴听到您的经验。
阅读 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, seeOcaml_operators
for more information.
顺便说一句,ocaml
编程语言 has an open source 实现。你应该考虑研究它的源代码。
请注意,与 =
相比,两个长度为 n 的长列表的 time complexity 为 O(n)。但是 ==
是常数时间。对于包含数千个不同元素的列表。
作为练习,为列表编写相当于 =
的代码(例如,仅使用 letrec
、match
和 ==
)。