کاتای الماس یک حرف را به عنوان ورودی میگیرد و آن را به شکل یک الماس بیرون میدهد. با گرفتن یک حرف، الماسی را چاپ میکند که با «A» شروع میشود و حرف دادهشده در پهنترین نقطهی آن قرار میگیرد.
در مثالهای زیر، فاصلهها با نویسهی · نشان داده شدهاند.
الماس برای حرف «A»:
A
الماس برای حرف «C»:
··A··
·B·B·
C···C
·B·B·
··A··
الماس برای حرف «E»:
····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····
باید تابع diamond را پیادهسازی کنید. این تابع یک لوزی چاپ میکند که از A شروع میشود و کاراکتر دادهشده در پهنترین نقاط آن قرار دارد. اگر دربارهی نوعها مطمئن نیستید میتوانید از امضای ارائهشده استفاده کنید، اما نگذارید این امضا خلاقیتتان را محدود کند:
diamond :: Char -> Maybe [String]
این تمرین با دادههای متنی کار میکند. به دلایل تاریخی، نوع String در Haskell با [Char]، یعنی فهرستی از کاراکترها، هممعنی است. برای پردازش کارآمدتر دادههای متنی میتوان از نوع Text استفاده کرد.
بهعنوان یک بخش اختیاری برای این تمرین، میتوانید
- text را به فهرست وابستگیهایتان در package.yaml اضافه کنید.Data.Text را به روش زیر وارد کنید:import qualified Data.Text as T
import Data.Text (Text)
diamond :: Char -> Maybe [Text] را بنویسید و به ترکیبکنندههای Data.Text مثلاً با T.pack ارجاع دهیدData.Text را ببینیدString را در Diamond.hs با Text جایگزین کنید:diamond :: Char -> Maybe [Text]
این بخش کاملاً اختیاری است.