Используйте =
, а не ==
.
Плавающие являются ссылочными типами в ocaml, а ==
проверяет равенство ссылок. Так что 0.1 == 0.1
ложно.
Как правило, вы почти всегда хотите использовать =
, а не ==
для сравнения двух значений.
Обратите внимание, что кроме этого ваша функция вернет true
для двух списков разного размера. Предполагая, что это не предназначено, вы должны возвращать true, только если оба списка пусты, и false, если один из них пуст, а другой нет.
Как примечание стиля, использование List.length
для проверки, является ли список пустым, обычно плохая идея (во-первых, это O (n), даже если это можно сделать в O (1) с сопоставлением с образцом). Использование сопоставления с образцом в самом начале также немного очистит ваш код.
Как это:
let rec compareVs v1 v2 = match v1, v2 with
| [], [] -> true
| [], _
| _, [] -> false
| x::xs, y::ys -> x = y && compareVs xs ys
Да, и если это не просто упражнение, обратите внимание, что вы можете просто выполнить v1 = v2
и на самом деле не нужно писать для этого функцию.