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?

¿Fue útil?

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?

Wikipedia Referencia

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top