اگر بخواهید با Raspberry Pi چیزی بسازید، احتمالاً از مقاومتها استفاده میکنید. برای این تمرین، باید دو نکته را دربارهی آنها بدانید:
برای حل این مشکل، تولیدکنندگان نوارهایی با کد رنگی روی مقاومتها چاپ میکنند تا مقدار مقاومتشان را نشان دهند. هر نوار یک موقعیت و یک مقدار عددی دارد.
۲ نوار اول یک مقاومت یک طرح رمزگذاری ساده دارند: هر رنگ به یک عدد مشخص نگاشت میشود. برای مثال، اگر نواری با رنگ brown (با مقدار 1) و سپس نواری با رنگ green (با مقدار 5) چاپ کنند، به عدد 15 تبدیل میشود.
در این تمرین میخواهید برنامهای مفید بسازید تا لازم نباشد مقدار نوارها را به خاطر بسپارید. برنامه نام رنگها را بهعنوان ورودی میگیرد و یک عدد دورقمی را بهعنوان خروجی میدهد، حتی اگر ورودی بیش از دو رنگ باشد!
رنگ نوارها به این صورت رمزگذاری شدهاند:
از مثال بالا: brown-green باید 15 را برگرداند و brown-green-violet هم باید 15 را برگرداند و رنگ سوم را نادیده میگیرد.
شما باید تابع زیر را پیادهسازی کنید
value :: (Color, Color) -> Int
که فقط دو رنگ را میپذیرد و مؤلفهی مقدار عددی مقاومت آن را تولید میکند.
امتیاز - تست ویژگی:
این تمرین فرصت خوبی است برای نوشتن تستهای ویژگی. اگر تا حالا هیچکدام را ننوشتهاید، چند منبع هم در ادامه آمده است:
ما یک نمونه تست ویژگی QuickCheck در فایل تست قرار دادهایم.
مثالهایی از ویژگیهایی که میتوان تست کرد:
value (x, y) >= 10 برای همهی (x, y) که x برابر Black نیست
فراخوانی show روی value (x, y) رشتهای را تولید میکند که از reverse کردن خروجی show روی value (y, x) به دست میآید.
همهی رنگها اسمهای یکتا دارند. (برای هر دو رنگ، اگر رنگها متفاوت باشند، اسمهایشان هم متفاوت است.)