Diferencia entre eq? y = en el esquema?
Pregunta
> (eq? 1 1)
#t
> (eq? 1.1 1.1)
#f
> (= 1.1 1.1)
#t
Esta es la ventana de interacción en DrScheme. ¿Podría alguien por favor explicar la diferencia entre = y eq? en el esquema?
Solución
= compara números. eq? pruebas si los parámetros representan el mismo objeto de datos en la memoria. Eqv? debería funcionar en el segundo caso, ya que pone a prueba mismo que eq? pero las pruebas primitivas especialmente. Más sobre predicados equlivence en el esquema aquí .
Otros consejos
Me imagino que ya
eq? evalúa a menos que su #f parámetros representan los mismos datos objeto en la memoria;
y
Tiendas Esquema de números inexactos (1.1) diferente de los números exactos (1)
Los dos argumentos 1.1 no residen en el mismo lugar en la memoria y regresan #f para eq?
eq? en números es impredecible. Todo depende de la implementación o no si los literales numéricos están enterrados de manera que los mismos números están en la misma posición en la memoria. El lenguaje de la raqueta, por ejemplo, ha elegido recientemente para internar tales literales durante la lectura. http://www.mail-archive.com/dev@racket -lang.org/msg04893.html
Usted no sabrá a ciencia cierta si es o no el tiempo de ejecución de su implementación en lenguaje representará de forma única cada número. Esto puede afectar a los valores que están en caja, como flotadores y bignums. Es por eso que = existe como un predicado para los números:. Comprueba la igualdad-dad del contenido, en lugar de la igualdad puntero superficial
Esto no es exclusivo de los lenguajes como Scheme:. La igualdad vs equalness se produce en Python ( es vs == ), por ejemplo
primera diferencia: eq?
funciona con cualquier par de valores, mientras que =
funciona con cualquier cantidad de números
hay varios otros equivalencia predicados . La mayoría de ellos sólo aceptan exactamente dos parámetros. =
se define en las 'números' capítulo