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?

È stato utile?

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?

Wikipedia Riferimento

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top