在一个独立的ocaml程序中断言
阅读后,我将此代码放入我的在一个独立的ocaml程序中断言,ocaml,assertion,Ocaml,Assertion,阅读后,我将此代码放入我的.ml文件: 设x=[3;5;9] (*测试附加到列表*) let()=断言(x@[2;10]=[3;5;9;2;10]) 跑 $ ocamlc -o BasicList BasicList.ml && ./BasicList Fatal error: exception Assert_failure("BasicList.ml", 3, 9) 为什么会发生这种错误 是否有其他有效或良好的实践方法来测试我的功能?我读过的大多数教科书都只在附录中
.ml
文件:
设x=[3;5;9]
(*测试附加到列表*)
let()=断言(x@[2;10]=[3;5;9;2;10])
跑
$ ocamlc -o BasicList BasicList.ml && ./BasicList
Fatal error: exception Assert_failure("BasicList.ml", 3, 9)
- 为什么会发生这种错误
- 是否有其他有效或良好的实践方法来测试我的功能?我读过的大多数教科书都只在附录中展示。我是Ocaml的新手,所以很高兴听到你的经验
=
结构相等运算符和代码
assert( x @ [2;10] = [3;5;9;2;10])
请注意,==
正在对物理相等运算符(指针)进行编码,更准确地说是物理装箱值)
e1==e2
测试e1和e2的物理相等性。关于可变类型
例如引用、数组、字节序列、具有可变
具有可变实例变量的字段和对象,e1==e2为真
当且仅当e1的物理修改也影响e2。在…上
非可变类型,(==)
的行为依赖于实现;
但是,可以保证e1==e2意味着比较e1 e2=0。
左关联运算符,有关详细信息,请参见Ocaml\u运算符
顺便说一句,ocaml
编程语言是一种实现。你应该考虑研究它的源代码。< /P>
请注意,与=
相比,两个长度为n的长列表的值为O(n)。但是==
是常数时间。对于数千个不同元素的列表
作为练习,为列表编写等效的=
(例如,仅使用letrec
、匹配
和=
)。阅读Ocaml
最近,您可能希望使用=
结构相等运算符和代码
assert( x @ [2;10] = [3;5;9;2;10])
请注意,==
正在对物理相等运算符(指针)进行编码,更准确地说是物理装箱值)
e1==e2
测试e1和e2的物理相等性。关于可变类型
例如引用、数组、字节序列、具有可变
具有可变实例变量的字段和对象,e1==e2为真
当且仅当e1的物理修改也影响e2。在…上
非可变类型,(==)
的行为依赖于实现;
但是,可以保证e1==e2意味着比较e1 e2=0。
左关联运算符,有关详细信息,请参见Ocaml\u运算符
顺便说一句,ocaml
编程语言是一种实现。你应该考虑研究它的源代码。< /P>
请注意,与=
相比,两个长度为n的长列表的值为O(n)。但是==
是常数时间。对于数千个不同元素的列表
作为练习,为列表编码等价的=
(例如,仅使用letrec
、匹配
和=
)