আমি এই প্রশ্নের উত্তর বাড়িয়ে দেব। আসুন =সমতুল্য পূর্বাভাস দিয়ে শুরু করা যাক । =সম্পৃক্ত কি না চেক করতে দুটি সংখ্যার সমান ব্যবহার করা হয়। আপনি যদি এটি একটি সংখ্যা ছাড়া অন্য কিছু সরবরাহ করেন তবে এটি একটি ত্রুটি বাড়িয়ে তুলবে:
(= 2 3) => #f
(= 2.5 2.5) => #t
(= '() '()) => error
eq?সম্পৃক্ত তার দুটি প্যারামিটার মেমরি একই বস্তুর respresent কিনা তা যাচাই করতে ব্যবহার করা হয়। উদাহরণ স্বরূপ:
(define x '(2 3))
(define y '(2 3))
(eq? x y) => #f
(define y x)
(eq? x y) => #t
তবে মনে রাখবেন যে '()মেমরিতে কেবল একটি খালি তালিকা রয়েছে (প্রকৃতপক্ষে শূন্য তালিকায় মেমরির উপস্থিতি নেই, তবে মেমরির অবস্থানের একটি পয়েন্টার 0খালি তালিকা হিসাবে বিবেচনা করা হয়)। তাই খালি তালিকার তুলনা করার সময় eq?সর্বদা ফিরে আসবে #t(কারণ তারা স্মৃতিতে একই বস্তুর প্রতিনিধিত্ব করে):
(define x '())
(define y '())
(eq? x y) => #t
এখন বাস্তবায়নের উপর নির্ভর করে আদিম মানের যেমন সংখ্যা, স্ট্রিং ইত্যাদির জন্য eq?ফিরে আসতে পারে বা নাও পারে #tউদাহরণস্বরূপ:
(eq? 2 2) => depends upon the implementation
(eq? "a" "a") => depends upon the implementation
এখানেই eqv?প্রিডিটেক ছবিতে আসে। এটি eqv?হ'ল eq?প্রাকটিকের মতো একই , এটি সর্বদা #tএকই আদিম মানের জন্য ফিরে আসবে । উদাহরণ স্বরূপ:
(eqv? 2 2) => #t
(eqv? "a" "a") => depends upon the implementation
অতএব eqv?একটি সুপারসেট eq?এবং বেশিরভাগ ক্ষেত্রে আপনার eqv?পরিবর্তে ব্যবহার করা উচিত eq?।
অবশেষে আমরা equal?প্রিফিকেটে আসি । equal?সম্পৃক্ত হিসাবে একই ঠিক eqv?ছাড়া এটি কিনা দুই তালিকা, ভেক্টর, ইত্যাদি উপাদান যা সন্তুষ্ট সংশ্লিষ্ট আছে পরীক্ষা ব্যবহার করা যেতে পারে সম্পৃক্ত eqv?সম্পৃক্ত। উদাহরণ স্বরূপ:
(define x '(2 3))
(define y '(2 3))
(equal? x y) => #t
(eqv? x y) => #f
সাধারণভাবে:
=আপনি দুটি সংখ্যা সমান কিনা তা পরীক্ষা করতে ইচ্ছুক থাকাকালীন প্রাকটিকেটটি ব্যবহার করুন ।
eqv?দুটি অ-সংখ্যাসূচক মান সমান কিনা তা পরীক্ষা করতে আপনি যখন চান তখন প্রিকিকেটটি ব্যবহার করুন ।
equal?আপনি দুটি তালিকা, ভেক্টর, ইত্যাদির সমতুল্য কিনা তা পরীক্ষা করতে ইচ্ছুক হলে প্রিকেটটি ব্যবহার করুন ।
eq?আপনি কী করছেন ঠিক বুঝতে না পারলে প্রাকটিকেট ব্যবহার করবেন না ।
eqv?, যার অর্থ ভিন্নeq?বাequal?