2009-06-02 20 views
6
> (eq? 1 1) 
    #t 
    > (eq? 1.1 1.1) 
    #f 
    > (= 1.1 1.1) 
    #t 

Bu, DrScheme'deki etkileşim penceresidir. Birisi lütfen = ve eq arasındaki farkı açıklayabilir mi? Şemada?Eşitlik arasındaki fark? ve = Şemada?

+4

daha ilginç bir soru, "eq", "eşittir?" Ve "eqv?" Arasındaki farktır. – newacct

cevap

9

= numaralarını karşılaştırır. eq? Parametrelerin bellekte aynı veri nesnesini temsil edip etmediğini sınar. EQV? İkinci durumda eq olarak aynı şekilde test ettiği için çalışmalıdır. ama özellikle ilkelleri test eder. More on equlivence predicates in scheme here.

3

Bunu

beri eq tahmin ediyorum? parametresinin bellekte aynı veriyi temsil etmediği sürece #f değerini değerlendirir; ;

ve

Şema depolar tam olmayan sayılar tam sayılar farklı (1,1) (1) iki 1.1 argümanlar bellekte aynı yerde ikamet ve # döndürmez

eq için f?

Wikipedia Reference

3

eq? numaraları önceden tahmin edilemez. Sayısal değişmezlerin birbirine bağlı olup olmadığı değil, aynı sayıların bellekte aynı konumda olması, uygulamaya bağlıdır. Örneğin, Raket dili, son zamanlarda okuma sırasında bu tür edebi türlerin internette çalışmasını seçmiştir. http://www.mail-archive.com/[email protected]/msg04893.html

Dil uygulamanızın çalışma zamanının her bir numarayı benzersiz olarak temsil edip etmeyeceğini bilmeyeceksiniz. Bu, yüzen ve bignum gibi kutulu değerleri etkileyebilir. Bu nedenle, =, sayılar için bir yüklem olarak mevcuttur: sığ işaretçi eşitliği yerine içeriğin eşitliğini kontrol eder.

Bu Scheme gibi dillere münhasır değildir: equalness vs eşitlik Python oluşur (örneğin vs == olduğunu).