HW1.pdf

‫تمرین عملی اول‬
‫‪Scheme‬‬
‫زبانهای برنامهسازی‬
‫سینا رشیدیان‬
‫‪ -0‬نصب و راهاندازی ‪Racket‬‬
‫همانطور که در کالس حل تمرین آشنایی مختصری با ‪ Racket‬پیدا کردید‪ ،‬این زبان یکی از زبانهای پیشرفتهی‬
‫خانوادهی ‪ Scheme‬میباشد‪ DrRacket .‬یک محیط برنامهنویسی تعاملی‪ 1‬برای این زبان است‪ .‬برای نصب نسخه‬
‫مناسب با توجه به سیستم عامل خود به آدرس زیر مراجعه کنید‪:‬‬
‫‪/http://racket-lang.org/download‬‬
‫بعد از اجرای برنامه با پنجره زیر مواجه میشوید‪ .‬در قسمت باال برنامه خود را مینویسید‪ .‬با زدن دکمه ‪Run‬‬
‫برنامه شما قابل اجرا شده و تابعهایی که در برنامهی خود تعریف کردهاید در قسمت پایین (محیط اجرای دستورها‬
‫و توابع) قابل استفاده هستند‪ .‬توجه کنید که بعد از هر تغییر باید دوباره دکمهی ‪ Run‬را بزنید‪.‬‬
‫برای آشنایی بیشتر با توابع اولیه ‪ Racket‬میتوانید از لینک زیر استفاده کنید‪:‬‬
‫‪http://docs.racket-lang.org/quick/index.html‬‬
‫‪interactive‬‬
‫‪1‬‬
‫‪ -1‬آشنایی با لیستها‬
‫لیستها از مفاهیم بنیادی زبان ‪ Lisp‬هستند‪ .‬برای آشنایی بیشتر و مسلط شدن به این مفهوم‪ ،‬توابع داده شده را‬
‫پیادهسازی کنید‪ .‬دقت کنید در این تمرین پیادهسازی باید بدون استفاده از توابع مشابه موجود در خود ‪Lisp‬‬
‫صورت گیرد‪.‬‬
‫‪ node :(my_insert1 node lst) o‬را در انتهای لیست ‪ lst‬اضافه میکند‪.‬‬
‫‪ :(my_insert2 lst1 lst2) o‬لیست ‪ lst2‬را در ادامهی لیست ‪ lst1‬قرار میدهد‪ .‬دقت کنید ترتیب مورد‬
‫نظر حفظ شود‪.‬‬
‫‪ ‬مثال‪ :‬اگر )‪ lst1 = ‘(1 2 3‬و )‪ lst2 = ‘(4 5 6‬باشد‪ ،‬آنگاه نتیجه این تابع بعد از اجرا‬
‫)‪ ‘(1 2 3 4 5 6‬است‪.‬‬
‫‪ :(my_seprator1 i lst) o‬این تابع‪ ،‬درایههای اول تا ‪ i‬ام لیست ‪ lst‬را بازمیگرداند‪.‬‬
‫‪ :(my_seprator2 i lst) o‬این تابع‪ ،‬درایههای ‪ i+1‬ام تا انتهای لیست ‪ lst‬را بازمیگرداند‪.‬‬
‫‪ node :(my_insert3 node i lst) o‬را در خانهی ‪ i‬ام لیست ‪ lst‬درج میکند‪ ( .‬در صورتی که مقدار ‪i‬‬
‫بیشتر از طول لیست بود‪ ،‬در انتهای لیست ‪ node‬را درج کنید‪).‬‬
‫‪ -2‬دگرنویسی تابع ‪length‬‬
‫در زبان ‪ lisp‬یک تابع به نام ‪ length‬وجود دارد طول یک لیست را برمیگرداند‪ .‬با کمک این تابع‪ ،‬تابعی به نام‬
‫‪ my_len‬بنویسید‪ ،‬که به صورت بازگشتی در لیست جستجو کند‪ ،‬و تعداد کل اتم‪2‬ها را برگرداند‪.‬‬
‫مثال‪:‬‬
‫‪(length ‘((a b) c (5 (6 7))) => 3‬‬
‫‪(my_len ‘((a b) c (5 (6))) => 5‬‬
‫‪ -3‬رسم بازگشتی فراکتالها‬
‫شکل زیر نشاندهندهی فراکتال معروف مثلث سرپینسکی است که از چپ به راست برای ‪ n‬های ‪ 3 ،1‬و ‪ 7‬رسم‬
‫شده است‪ .‬شما باید تابع )‪ (sierp n‬را پیادهسازی کنید‪ ،‬به گونهای که خروجی آن‪n ،‬امین فراکتال سرپینسکی‬
‫باشد‪.‬‬
‫به عنوان راهنمایی برای نحوهی کشیدن اشکال در ‪ lisp‬به لینک زیر مراجعه کنید‪.‬‬
‫‪http://docs.racket-lang.org/quick/index.html‬‬
‫همچین برای کسب اطالعات بیشتر در مورد این فراکتال میتوانید لینک زیر را مطالعه کنید‪.‬‬
‫‪http://en.wikipedia.org/wiki/Sierpinski_triangle‬‬
‫‪atom‬‬
‫‪2‬‬
‫نکات کلی‬
‫‪ ‬مهلت ارسال این تمرین تا ساعت ‪ 23:32‬روز ‪ 3‬ام آبان ماه است‪.‬‬
‫‪ ‬تمرین در قالب گروههای دو نفره قابل انجام است‪.‬‬
‫‪ ‬نحوهی فرستادن تمرین در گروه درس توضیح خواهد داده شد‪.‬‬
‫‪ ‬با هرگونه تقلب به شدت برخورد خواهد شد‪.‬‬
‫‪ ‬هرگونه ابهام در صورت تمرین را حتما در گروه درس مطرح کنید‪ ،‬در هنگام تصحیح و یا تحویل تمارین‬
‫هیچ عذری مبنی بر گنگ بودن صورت تمرین قابل قبول نخواهد بود‪.‬‬
‫‪ ‬جواب تمرین خود را به گروه نفرستید‪.‬‬
‫‪ ‬سواالت خود را در گروه مطرح کنید تا دوستانتان نیز استفاده کنند‪.‬‬