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

यह डॉशेचेम में इंटरैक्शन विंडो है। क्या कोई कृपया = और eq के बीच के अंतर को समझा सकता है? योजना में?ईक के बीच अंतर? और = योजना में?

+4

अधिक दिलचस्प सवाल 'eq?', 'बराबर? ', और' eqv?' के बीच अंतर है। – newacct

उत्तर

9

= तुलना संख्याओं में परिभाषित किया गया है। eq? परीक्षण करता है कि पैरामीटर स्मृति में एक ही डेटा ऑब्जेक्ट का प्रतिनिधित्व करते हैं। eqv? दूसरे मामले में काम करना चाहिए क्योंकि यह ईक के समान परीक्षण करता है? लेकिन प्राइमेटिव विशेष रूप से परीक्षण करते हैं। More on equlivence predicates in scheme here

1

पहला अंतर: eq? मूल्यों की किसी भी जोड़ी के साथ काम करता है, जबकि = किसी भी संख्या के साथ काम करता है।

कई अन्य equivalence predicates हैं। उनमें से ज्यादातर केवल दो पैरामीटर स्वीकार करते हैं। ='numbers' chapter

3

मुझे लगता है कि होता है कि

के बाद से

eq? #f तक मूल्यांकन करता है जब तक कि इसके पैरामीटर उसी डेटा का प्रतिनिधित्व करते हैं ऑब्जेक्ट मेमोरी में;

और

योजना भंडार अयथार्थ संख्या (1.1) सटीक संख्या से अलग ढंग से (1)

दो 1.1 तर्क स्मृति में एक ही स्थान पर रहते नहीं करते हैं और लौट # ईक के लिए एफ?

Wikipedia Reference

3

eq? संख्याओं पर अप्रत्याशित है। यह कार्यान्वयन पर निर्भर करता है या नहीं कि संख्यात्मक शब्दकोषों को इंटरैड किया गया है ताकि समान संख्याएं स्मृति में समान स्थान पर हों। रैकेट भाषा, उदाहरण के लिए, हाल ही में पढ़ने के दौरान ऐसे शाब्दिकों को प्रशिक्षित करने के लिए चुना गया है। http://www.mail-archive.com/[email protected]/msg04893.html

आप यह सुनिश्चित करने के लिए नहीं जान पाएंगे कि आपकी भाषा कार्यान्वयन के रनटाइम प्रत्येक संख्या का विशिष्ट रूप से प्रतिनिधित्व करेंगे या नहीं। यह उन मूल्यों को प्रभावित कर सकता है जो बक्से वाले हैं, जैसे फ्लोट्स और बिग्नम। यही कारण है कि = संख्याओं के लिए एक अनुमान के रूप में मौजूद है: यह उथले पॉइंटर समानता के बजाय सामग्री के बराबर-नास की जांच करता है।

इस योजना जैसी भाषाओं के लिए विशेष नहीं है: समानता equalness बनाम पायथन में होता है (उदाहरण के लिए बनाम == है)।