在一个独立的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的新手,所以很高兴听到你的经验
读取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
匹配
=