Differenza tra eq? e = nello Schema?
Domanda
> (eq? 1 1)
#t
> (eq? 1.1 1.1)
#f
> (= 1.1 1.1)
#t
Questa è la finestra di interazione in DrScheme. qualcuno potrebbe spiegare la differenza tra = e eq? nello Schema?
Soluzione
= confronta i numeri. eq? verifica se i parametri rappresentano lo stesso oggetto dati in memoria. EQV? dovrebbe funzionare nel secondo caso come test stessi eq? ma i test primitive appositamente. Altro su predicati equlivence nello schema qui .
Altri suggerimenti
Direi che dal
eq? restituisce #f meno che la sua parametri rappresentano gli stessi dati oggetto in memoria;
e
Negozi Schema numeri inesatti (1.1) diversamente da numeri esatti (1)
I due argomenti 1.1 non risiedono nello stesso luogo in memoria e ritornano #f per eq?
eq? sui numeri è imprevedibile. Tocca alla realizzazione o meno se letterali numerici sono sepolti in modo che gli stessi numeri sono nella stessa posizione nella memoria. La lingua Racket, per esempio, ha recentemente scelto di internare questi letterali durante la lettura. http://www.mail-archive.com/dev@racket -lang.org/msg04893.html
Non si sa con certezza se il runtime del vostro implementazione del linguaggio rappresenterà ogni numero unico. Questo può influenzare i valori che sono boxed, come carri e bignum. Ecco perché = esiste come un predicato per i numeri:. Controlla la parità-ness del contenuto, piuttosto che uguaglianza debole puntatore
Questa non è esclusivo per linguaggi come schema:. Uguaglianza vs eguaglianza si verifica in Python ( è vs == ) ad esempio
prima differenza: eq?
funziona con qualsiasi coppia di valori, mentre =
funziona con qualsiasi numero di numeri
ci sono molti altri equivalenza predicati . La maggior parte di loro accettano solo esattamente due parametri. =
è definito nel 'numeri' capitolo