Una explicación rápida sobre ==
y !=
en OCaml además de todas las respuestas correctas que ya se han proporcionado:
1/==
y !=
exponen detalles de implementación que realmente no desea conocer. Ejemplo:
# let x = Some [] ;;
val x : 'a list option = Some []
# let t = Array.create 1 x ;;
val t : '_a list option array = [|Some []|]
# x == t.(0) ;;
- : bool = true
Hasta ahora, todo bien: x
y t.(0)
son físicamente iguales porque t.(0)
contiene un puntero al mismo bloque que está señalando a x
. Esto es lo que dicta el conocimiento básico de la implementación. PERO:
# let x = 1.125 ;;
val x : float = 1.125
# let t = Array.create 1 x ;;
val t : float array = [|1.125|]
# x == t.(0) ;;
- : bool = false
Lo que está viendo aquí son los resultados de una optimización de otro modo útil que involucra flotadores.
2/Por otro lado, existe una forma segura de usar ==
, y eso es una manera rápida pero incompleta de verificar la igualdad estructural.
Si está escribiendo una función de la igualdad en los árboles binarios
let equal t1 t2 =
match ...
cheques t1
y t2
por la igualdad física es una forma rápida de detectar que son, obviamente, estructuralmente iguales, sin ni siquiera tener que recursivo y leerlos. Es decir:
let equal t1 t2 =
if t1 == t2
then true
else
match ...
Y si se tiene en cuenta que en OCaml el operador “booleano o” es “perezosa”,
let equal t1 t1 =
(t1 == t2) ||
match ...
+1 que fueron los más rápidos ... :) – LB40