Haskell3.pdf

‫زبان‌های‌بروامه‌وویسی‬
‫‪Haskell‬‬
‫تمریه‌عملی‌سوم‬
‫‪‬‬
‫جَاة توزیيّب را ثِ آدرس ‪ [email protected]‬ثفزستیذ‪ .‬فبیل ‪ HW3.hs‬را در یک فبیل ‪zip‬‬
‫ثِ ًبم ‪ = # ( STD#‬شوبرُ داًشجَیی) قزار دّیذ‪ .‬هَضَع ایهیل ًیش ثبیذ حتوب ثِ فزهت‬
‫‪ HW#_STD#‬ثبشذ‪ .‬در‬
‫صَرتی کِ توزیي را ثِ صَرت گزٍّی اًجبم دادُایذ ثِ تَضیحبت دادُ شذُ در کالس هزاجعِ کٌیذ!‬
‫‪‬‬
‫ّزگًَِ سَال در هَرد توزیي را ثِ آدرس ‪ [email protected]‬ثفزستیذ‪.‬‬
‫‪‬‬
‫سعی کٌیذ کذتبى ثب تَجِ ثِ ‪ًَ styling guideline‬شتِ شذُ ثبشذ‪.‬‬
‫‪‬‬
‫کذ شوب ثبیذ حتوب ثذٍى ّیچگًَِ ٍارًیٌگ کبهپبیل شَد‪( .‬ثِ ‪ styling guideline‬هزاجعِ کٌیذ)‪.‬‬
‫‪‬‬
‫هْلت ارسبل ایي توزیي تب سبعت ‪‌۲۳:۵۹‬روز‌‪۴‬م‌آذر است‪.‬‬
‫قسمت‌اول‪‌:‬کَتبًَُیسی‬
‫کبری کِ در ایي توزیي ثبیذ اًجبم دّیذ ثسیبر سبدُاست‪ .‬شوب ثبیذ‬
‫‪ ۳‬تبثعی کِ در اداهِ هیشَد را در کَتبُتزیي حبلت هوکي‬
‫پیبدُسبسی کٌیذ‪.‬‬
‫قواویه‌‬
‫‪‬‬
‫ثزای ّزکذام اس تَاثع شوب باید ثب گذاشتي کبهٌتّبی هٌبست ًحَُی کبر کذتبى را تَضیح دّیذ‪ .‬کدهای‌بدون‌توضیح‌‬
‫هیچ‌ومره‌ای‌از‌ایه‌تمریه‌ومی‌گیرود‪ .‬در ایي توزیي استفبدُ اس ّزچیش هَجَد در ‪ haskell-platform‬هجبس است‬
‫اهب شوب ثبیذ ثب کبهٌت خَدتبى ًشبى دّیذ کِ اس ًحَُی کبر کذی کِ ًَشتِایذ خجز داریذ‪ .‬در ًتیجِ کذ خَدتبى را کبهل‬
‫تَضیح دّیذ‪.‬‬
‫‪‬‬
‫هتي کبهٌتّب جش عَل کذ شوب حسبة ومی‌شود‪.‬‬
‫‪‬‬
‫هتي هزثَط ثِ ‪ّtype signature‬ب جش عَل کذ شوب حسبة ومی‌شود‪.‬‬
‫‪‬‬
‫دستَرّبی ‪ import‬جش عَل کذ شوب حسبة ومی‌شود‪.‬‬
‫‪‬‬
‫کاراکترهای‌ ‪ whitespace‬جش عَل کذ شوب حسبة ومی‌شود‪ .‬در ًتیجِ فزهت ٍ ‪ indentation‬را در کذ خَد‬
‫رعبیت کٌیذ‪.‬‬
‫‪‬‬
‫هیتَاًیذ تبثعّبی جذیذی را خَدتبى اضبفِ کٌیذ (هوکي است ثِ ایي تزتیت کذ شوب کَتبُتز شَد)‪.‬‬
‫‪‬‬
‫اس ثیي توزیيّب‪ ۲۰ ،‬درصذ کَتبُتزیي کذّب ثِ تزتیت کَتبُثَدى ًوزُی اضبفِ خَاٌّذ گزفت‪ّ .‬نچٌیي ثزای ّزکذام اس‬
‫تبثعّبی تَضیحدادُشذُ کَتبُتزیي پیبدُسبسی ًوزُی اضبفِ خَاّذ گزفت‪ .‬در ایي توزیي هیتَاًیذ تا‌‪۲۰۰‬درصد ًوزُی‬
‫اضبفِ ثگیزیذ‪( .‬یعٌی در هجوَع ‪ ۳‬ثزاثز ًوزُی توزیي را کست کٌیذ)‪.‬‬
‫راه‌ومایی‌‬
‫‪‬‬
‫تب جبیی کِ هیتَاًیذ اس تبثعّبی کتبةخبًِی استبًذارد استفبدُ کٌیذ‪ .‬استفبدُ کزدى اس (هثال)‬
‫‪ map‬خیلی کَتبُتز اس‬
‫پیبدُسبسی کزدى آى است‪.‬‬
‫‪‬‬
‫ثِ عَر هشخص سعی کٌیذ ثِ جبی ًَشتي تبثعّبی ثبسگشتی اس تبثعّبیی استفبدُ کٌیذ کِ ایي هفبّین ثبسگشتی را در‬
‫خَد دارًذ‪.‬‬
‫‪‬‬
‫هیتَاًیذ ثزای اًجبمدادى ایي توزیي اثتذا تبثعّب را پیبدُسبسی کٌیذ ٍ ثعذ سعی کٌیذ عَل آى را کن کٌیذ‪.‬‬
‫‪‬‬
‫هغوئي ثبشیذ کِ تبثعّبی شوب ثزای همهی ٍرٍدیّب جَاة درست را هیدٌّذ‪ ًِ ،‬فقظ ٍرٍدیّبیی کِ در صَرت سَال‬
‫آهذُ است‪.‬‬
‫‪‬‬
‫در صَرتی کِ ثب تبثعّبی خَاستِشذُ هشکلی داریذ ثب ایهیل سَال خَد را هغزح کٌیذ‬
‫تمریه‌اول‪ :‬ثبسی لیلی‬
‫در ایي توزیي ثبیذ یک تبثع ثِ صَرت‬
‫]]‪skips :: [a] -> [[a‬‬
‫ثٌَیسیذ‪ .‬دقت کٌیذ کِ خزٍجی ایي تبثع یک لیست اس لیستّب است‪ .‬اٍلیي لیست خزٍجی ثبیذ ّوبى لیست ٍرٍدی ثبشذ‪ .‬دٍهیي‬
‫لیست خزٍجی ثبیذ اعضبی لیست ٍرٍدی را یکی در هیبى داشتِثبشذ‪ .‬سَهیي لیست خزٍجی دٍتب در هیبى ٍ ّویيعَر تب آخز‪ .‬ثِ‬
‫هثبلّب دقت کٌیذ‪:‬‬
‫]”‪skips “ABCD” == [“ABCD”, “BD”, “C”, “D‬‬
‫]”!“ ‪skips “hello!” == [“hello!”, “el!”, “l!”, “l”, “o”,‬‬
‫]]‪skips [1] == [[1‬‬
‫]]‪skips [True, False] == [[True, False], [False‬‬
‫][ == ][ ‪skips‬‬
‫دقت کٌیذ کِ عَل لیست خزٍجی ّویشِ ثب عَل لیست ٍرٍدی ثزاثز است‪.‬‬
‫تمریه‌دوم‪ :‬هبکشیون هحلی‬
‫یک هبکشیون هحلی در یک لیست عضَی است ثِ صَرت اکیذ اس عضَ قجل ٍ عضَ ثعذ خَد ثشرگتز ثبشذ‪.‬‬
‫هثال در لیست ]‪ [2,3,4,1,5‬تٌْب هبکشیون هحلی ‪ 4‬است‪ .‬دقت کٌیذ کِ ‪ 5‬هبکشیون هحلی ًیست سیزا عضَ ثعذ ًذارد‪ .‬تبثع سیز را‬
‫ثٌَیسیذ‪:‬‬
‫]‪localMaxima :: [Integer] -> [Integer‬‬
‫ایي تبثع ثبیذ ّوِی هبکشیونّبی هحلی لیست ٍرٍدی را ثِ ّوبى تزتیت ثبسگزداًذ‪.‬‬
‫]‪localMaxima [2,9,5,6,1] == [9,6‬‬
‫]‪localMaxima [2,3,4,1,5] == [4‬‬
‫][ == ]‪localMaxima [1,2,3,4,5‬‬
‫تمریه‌سوم‪ّ :‬یستَگزام‬
‫ثزای ایي توزیي ثبیذ یک تبثع ثِ صَرت‬
‫‪histogram :: [Integer] -> String‬‬
‫ثٌَیسیذ کِ یک لیست اس اعذاد ‪ 0‬تب ‪ 9‬هیگیزد ٍ یک ّیستَگزام عوَدی ثبسهیگزداًذ کِ ًشبى هیدّذ ّز عذد چٌذثبر تکزار‬
‫شذُاست‪ .‬هیتَاًیذ فزض کٌیذ کِ اعذاد ٍرٍدی حتوب اس اعذاد ‪ 0‬تب ‪ّ 9‬ستٌذ (یعٌی السم ًیست حبلتّبی دیگز را چک کٌیذ)‪.‬‬
‫رشتِای کِ تَسظ تبثع ثبسگزداًذُ هیشَد ثبیذ دقیقب هبًٌذ هثبلّبی سیز ثبشذ‪:‬‬
‫‪historgram [1,1,1,5]:‬‬
‫*‬
‫*‬
‫*‬
‫*‬
‫==========‬
‫‪0123456789‬‬
‫‪histogram [1,4,5,4,6,6,3,4,2,4,9]:‬‬
‫*‬
‫*‬
‫* *‬
‫* ******‬
‫==========‬
‫‪0123456789‬‬
‫دقت کٌیذ کِ اگز در ‪ ghci‬دستَری هبًٌذ ]‪ٍ histogram [3,5‬ارد کٌیذ احتوبال خزٍجیای کِ دریبفت هیکٌیذ چیشی ثِ‬
‫صَرت سیز خَاّذ ثَد‪:‬‬
‫”‪“ * * \n==========\n0123456789‬‬
‫اگز هیخَاّیذ خَد ّیستَگزام کشیذُ شَد اس )]‪ putStr (histogram [3,5‬استفبدُ کٌیذ کِ حزٍجی تبثع را «چبح» هیکٌذ‪.‬‬