पिछले उत्तरों के अलावा, मैं कुछ टिप्पणियां जोड़ूंगा।
ये सभी विधेय identity
एक वस्तु के लिए, लेकिन विभिन्न संदर्भों में सार फ़ंक्शन को परिभाषित करना चाहते हैं ।
EQ?
कार्यान्वयन-निर्भर है और यह are 2 objects the same?
केवल सीमित उपयोग में सवाल का जवाब नहीं देता है । कार्यान्वयन के दृष्टिकोण से, यह विधेय सिर्फ 2 संख्याओं (वस्तुओं के सूचक) की तुलना करता है, यह वस्तुओं की सामग्री को नहीं देखता है। इसलिए, उदाहरण के लिए, यदि आपका कार्यान्वयन विशिष्ट रूप से स्ट्रिंग्स को अंदर नहीं रखता है, लेकिन प्रत्येक स्ट्रिंग के लिए अलग मेमोरी आवंटित करता है, तो (eq? "a" "a")
यह गलत होगा।
EQV?
- यह वस्तुओं के अंदर दिखता है, लेकिन सीमित उपयोग के साथ। यदि यह सही है तो यह कार्यान्वयन-निर्भर है (eqv? (lambda(x) x) (lambda(x) x))
। यहां यह एक पूर्ण दर्शन है कि इस विधेय को कैसे परिभाषित किया जाए, जैसा कि हम आजकल जानते हैं कि कुछ कार्यों की कार्यक्षमता की तुलना सीमित उपयोग के साथ करने के लिए कुछ तेज़ तरीके हैं। लेकिन eqv?
बड़ी संख्या, तार आदि के लिए सुसंगत उत्तर प्रदान करता है।
व्यावहारिक रूप से, इनमें से कुछ विधेय किसी वस्तु की गणितीय परिभाषा (गणितीय रूप से) का उपयोग करने की कोशिश करते हैं, जबकि अन्य किसी वस्तु के प्रतिनिधित्व का उपयोग करते हैं (यह वास्तविक मशीन पर कैसे लागू किया जाता है)। पहचान की गणितीय परिभाषा लाइबनिज़ से आती है और यह कहता है:
X = Y iff for any P, P(X) = P(Y)
X, Y being objects and
P being any property associated with object X and Y.
आदर्श रूप से यह कंप्यूटर पर इस बहुत परिभाषा को लागू करने में सक्षम होगा, लेकिन अभद्रता और / या गति के कारणों के लिए इसे शाब्दिक रूप से लागू नहीं किया जाएगा। यही कारण है कि बहुत सारे ऑपरेटर हैं जो प्रत्येक को इस परिभाषा के आसपास विभिन्न दृष्टिकोणों पर ध्यान केंद्रित करने की कोशिश करते हैं।
एक निरंतरता के लिए एक पहचान की अमूर्त परिभाषा की कल्पना करने की कोशिश करें। भले ही आप कार्यों के सबसेट ( सिग्मा-पुनरावर्ती वर्ग के कार्यों ) की एक परिभाषा प्रदान कर सकते हैं , भाषा किसी भी विधेय को सही या गलत होने का आरोप नहीं लगाती है। यह भाषा की परिभाषा और कार्यान्वयन के लिए बहुत अधिक दोनों को जटिल करेगा।
अन्य विधेय के लिए संदर्भ का विश्लेषण करना आसान है।
eqv?
, जिसका मतलब कुछ अलग हैeq?
याequal?