HW2.pdf

‫تمرین عمل دوم‬
‫‪Scheme‬‬
‫درس زبانهای برنامهسازی‬
‫سینا رشیدیان‬
‫‪ .1‬باز و بسته کردن درها‬
‫فرض کنید تعدادی در داریم که در ابتدا همگی آنها بسته هستند‪ .‬در مرحله ‪ i‬ام وضعیت درهای مضرب‬
‫‪ i‬را از حالت بسته به باز و از حالت باز به بسته تغییر میدهیم‪ .‬به طور مثال‪ ،‬در مرحلهی دوم وضعیت‬
‫درهای ‪ 6 ،4 ،2‬و ‪ ...‬تغییر میکند‪ .‬تابع زیر را به گونهای بنویسید که به ترتیب تعداد درها و تعداد مراحل‬
‫انجام عملیات را بگیرد و وضعیت نهایی آنها را برگرداند‪.‬‬
‫)‪(doors 5 2‬‬
‫‪‬‬
‫)‪'(1 0 1 0 1‬‬
‫‪ .2‬الگوریتم ‪Quicksort‬‬
‫برنامهای بنویسید که یک لیست از ورودی بگیرد‪ ،‬الگوریتم ‪ quicksort‬را روی آن انجام دهد و لیست‬
‫مرتب شده به صورت صعودی را به عنوان جواب بازگرداند‪.‬‬
‫))‪ (quicksort '(8 7 3 6 4 5 2‬‬
‫)‪'(2 3 4 5 6 7 8‬‬
‫‪ .3‬کار با لیست‬
‫تابعی به نام ‪ dolst‬را در نظر بگیرید که دو لیست به عنوان ورودی میگیرد‪ ،‬به ترتیب روی لیست اول‬
‫حرکت کند و تغییرات ذکر شده براساس مقدار خوانده شده را بر روی لیست دوم اعمال کند‪ .‬اینکه با‬
‫توجه به عدد خوانده شده چه تغییری قرار است روی لیست اتفاق بیفتد در جدول زیر آورده شده است‪.‬‬
‫مقدار خوانده شده از لیست اول‬
‫تاثیر آن بر روی لیست دوم‬
‫‪1‬‬
‫مقادیر لیست دوم دو برابر میشوند‪.‬‬
‫‪2‬‬
‫مقدار بعدی در لیست اول یک تابع است که فقط یک متغیر‬
‫ورودی میگیرد‪ ،‬این تابع باید روی لیست دوم اعمال شود‪.‬‬
‫‪3‬‬
‫مقادیر لیست که از ‪ 11‬اکیدا بیشتر است را برمیگرداند‪.‬‬
‫برای تعریف این تابع حق استفاده از تابع کمکی دیگری که ‪ define‬کرده باشید را ندارید و باید در‬
‫صورت نیاز از تابع ‪ lambda‬و متغیرهای کمکی قابل تعریف در ‪ let‬استفاده کنید‪.‬‬
‫))‪ (dolst '(1) ‘(1 8 9‬‬
‫)‪'(2 16 18‬‬
‫))‪ (dolst '(2 (+ 7)) ‘(1 8 9‬‬
‫)‪'(8 15 16‬‬
‫))‪ (dolst '(3) ‘(1 8 9‬‬
‫)('‬
‫))‪ (dolst '(1 2 (+ 7) 3) ‘(4 8 9‬‬
‫)‪'(23 25‬‬
‫راهنمایی‬
‫‪ ‬برای انجام این تمرین توابع زیر و مشتقات آنها را مطالعه کنید‪.‬‬
‫‪filter, partition, curry, map, let, apply, cond‬‬
‫‪ ‬انجام تمرین را به شب آخر موکول نکنید‪.‬‬
‫نکات کلی‬
‫‪ ‬مهلت ارسال این تمرین تا ساعت ‪ 23:32‬روز ‪ 16‬ام آبان ماه است‪.‬‬
‫‪ ‬در صورت ارسال با تاخیر تمرین بهازای هر ساعت ‪ %1‬از نمرهی شما کسر خواهد شد‪.‬‬
‫‪ ‬تمرین در قالب گروههای دو نفره قابل انجام است‪.‬‬
‫‪ ‬نحوهی فرستادن تمرین مشابه تمرین سری اول است‪ ،‬یک ایمیل که محتوی فایل تمرین است با موضوع‬
‫و نام فایل ارسالی (که فقط نیاز است یک فایل ‪ .rkt‬بفرستید) که فرمت ‪ HW2 #STD1 #STD2‬دارد‬
‫را به آدرس الکترونیکی ‪ [email protected]‬ارسال نمایید‪.‬‬
‫‪ ‬با هرگونه تقلب به شدت برخورد خواهد شد‪.‬‬
‫‪ ‬هرگونه ابهام در صورت تمرین را حتما در گروه درس مطرح کنید‪ ،‬در هنگام تصحیح و یا تحویل تمارین‬
‫هیچ عذری مبنی بر گنگ بودن صورت تمرین قابل قبول نخواهد بود‪.‬‬
‫‪ ‬جواب تمرین خود را به گروه نفرستید‪.‬‬
‫‪ ‬سواالت خود را در گروه مطرح کنید تا دوستانتان نیز استفاده کنند‪.‬‬