Прочтите документацию 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 = 0. Левоассоциативный оператор, см. Ocaml_operators
для больше информации.
Кстати, ocaml
язык программирования имеет и реализацию с открытым исходным кодом. Вам следует изучить его исходный код.
Имейте в виду, что сравнение с =
двумя длинными списками длиной n имеет временную сложность из O ( п) . Но ==
- это постоянное время. Для списков из многих тысяч элементов, которые имеют значение.
В качестве упражнения закодируйте эквивалент =
для списков (например, используя только letrec
, match
и ==
).