আমি এই প্রশ্নের উত্তর বাড়িয়ে দেব। আসুন =
সমতুল্য পূর্বাভাস দিয়ে শুরু করা যাক । =
সম্পৃক্ত কি না চেক করতে দুটি সংখ্যার সমান ব্যবহার করা হয়। আপনি যদি এটি একটি সংখ্যা ছাড়া অন্য কিছু সরবরাহ করেন তবে এটি একটি ত্রুটি বাড়িয়ে তুলবে:
(= 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?