تعریف تساوی دو حرف

سلام. میخواستم بدونم چطور میشه یه تابع برای بررسی تساوی دو حرف (سمبل) نوشت. مقایسه حروف تو کامپیوتر چطور انجام میشه؟ اونا رو به عدد تبدیل میکنیم؟ یعنی حروف و نماد هایی که برای نوشتن استفاده میشن همه مثل عدد پی یه نماد ثابت هستن و یه مقدار عددی دارن؟ راهنمایی کنید لطفاً.

اگه درست متوجه شده باشم شما میخواید ببینید دوتا استرینگ با هم برابر هستن یا نه و اگر برابر نبودن ببینید چقدر اختلاف دارن.
این یه مساله‌ی علوم کامپیوتریه به نام Levenshtein distance یا String distance. فکر میکنم این لینکها بتونن کمکتون کنن:

https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Common_Lisp

1 Like

نه دقیقاً. مشکلم ساده تره. هدفم این بود خودم تساوی دو حرف مثل a و b رو به صورت یه تابع تعریف کنم. این تابع باید مقایسه دو حرف یا نماد رو به تساوی دو عدد تبدیل کنه. میخواستم بدونم باید همه حروف و نماد ها رو به صورت متغیرهایی که مقدار عددی دارن تعریف کنم؟ خود تابع تساوی = تو زبانهای برنامه نویسی چطور این مقایسه رو انجام میده؟
دلیلشم اینه که داشتم حساب لاندا میخوندم. بعد از تعریف اعداد طبیعی و عملهای اصلی حساب، ساختار داده زوج مرتب رو هم به صورت تابع تعریف میکنیم. ولی برای نوشتن تابعی که با داشتن اندیس یه عنصر، اونو از لیست بیرون میکشه و بمون میده، نیاز داریم به یه تابع که تساوی نمادها رو بررسی کنه. تو زبانهای برنامه نویسی تساوی بطور پیشفرض تعریف شده ولی توی حساب لاندا شما همه چیزو از صفر باید تعریف کنید. تساوی اعداد طبیعی رو به صورت تابع تعریف کردم ولی هیچ تابعی برای بررسی تساوی نمادها و حروف ندارم.

شما میتونید با تبدیل حرف به عدد unicode یا با hash کردن حرف به یک عدد از تساوی عدد استفاده کنید اگه حتی میخواهید تساوی دو عدد هم خودتون بنویسید
میشه دو عدد رو از هم تفریق کرد و اگر جواب صفر شد باهم برابر هستند

2 Likes

آره، تهش همینکارو باید انجام داد. ولی برای تبدیل حرف به عدد unicode باید از تابعی که تو زبانهای برنامه نویسی از قبل وجود داره استفاده کنم. من میخواستم این کارو رو با ابزارهای حساب لاندا انجام بدم. میخواستم بدونم همه کاراکترها رو باید مثل متغیر (یا درست ترش تابع، چون فقط تابع داریم تو حساب لاندای محض) با مقدارهایی که با کدگزاری unicode یا کدگزاری دلخواه خودم انتخاب میشن تعریف کنم؟ راهش اینه؟ از اونجایی که کاراکتر اعداد (مثل 1 و 2 و 3) تو حساب لاندا صرفاً اسم توابع تعریف کننده اون اعداد هستن، اگه اینکارو کنم هیچ فرقی بین مثلا کاراکتر 123 و کاراکتر a دیگه وجود نداره. اونموقع اگه از یه تابع تساوی استفاده کنم بم میگه 123 و a یه چیز هستن. که نباید اینطور باشه.

خب هر کاراکتری کد اسکی داره دیگه! لازم نیست شما به هر کاراکتر، یک عدد تخصیص بدید. فقط کافیه ببینید توی زبان مورد نظرتون، کد اسکی کاراکترها رو با چه تابعی میشه به دست آورد.

1 Like

https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

1 Like

تو لینکی که دادی خودش توضیح داده
if we write ‘5’-‘0’ it evaluates to 53-48, or the int 5
تقریباً فهمیدم چکار کنم. ممنون

در واقع من باید برای تابعی که عدد یک رو تعریف میکنه از کارکتر 1 استفاده کنم ولی وقتی میخوام کدگزاری و مقایسه کاراکتر ها رو انجام بدم از کاراکتر هایی که تو گیومه گذاشته شدن استفاده کنم تا بین عدد 1 و کاراکتر “1” تفاوت باشه؟ درسته؟

حرف ۵ unicode
53 داره

نه همه ی حروف فقط کد ascii یا unicode شو باهم مقایسه کن فرقی نداره

1 Like