2009-06-02 30 views
6
> (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 explicar la diferencia entre = y eq? en Scheme?Diferencia entre eq? y = en Scheme?

+4

pregunta más interesante es la diferencia entre 'eq?', 'Igual?', Y 'eqv?' – newacct

Respuesta

9

= compara números. eq? prueba si los parámetros representan el mismo objeto de datos en la memoria. eqv? debería funcionar en el segundo caso, ya que prueba lo mismo que eq? pero prueba primitivas especialmente. More on equlivence predicates in scheme here.

1

primera diferencia: eq? funciona con cualquier par de valores, mientras que = funciona con cualquier cantidad de números.

hay varios otros equivalence predicates. La mayoría de ellos solo acepta exactamente dos parámetros. = se define en el 'numbers' chapter

3

yo supongo que desde

eq? evalúa a #f a menos que sus parámetros representen el mismo objeto de datos en la memoria;

y

almacena Esquema de números inexactos (1.1) diferente a los números exactos (1)

Las dos 1,1 argumentos no residen en el mismo lugar en la memoria y regresan # f para eq?

Wikipedia Reference

3

eq? en números es impredecible. Depende de la implementación o no si los literales numéricos son enterrados para que los mismos números estén en la misma ubicación en la memoria. El lenguaje Racket, por ejemplo, ha elegido recientemente internar dichos literales durante la lectura. http://www.mail-archive.com/[email protected]/msg04893.html

No sabrá con certeza si el tiempo de ejecución de su implementación de idioma representará o no cada número de manera única. Esto puede afectar valores que están enmarcados, como flotantes y bignums. Es por eso que = existe como un predicado para los números: verifica la igualdad del contenido, en lugar de la igualdad del puntero superficial.

Esto no es exclusivo de lenguas como el esquema: la igualdad vs equalness se produce en Python (es vs ==) por ejemplo.