مسیرها
/
F#
F#
/
تمرین‌ها
/
تمیز و برق‌زده
تمیز و برق‌زده

تمیز و برق‌زده

تمرین یادگیری

مقدمه

نوع char در F# مقداری ۱۶ بیتی است که کوچک‌ترین اجزای آدرس‌پذیر متن را نمایش می‌دهد و به‌طور پیش‌فرض تغییرناپذیر است.

می‌توان charها را با نقل‌قول تکی به‌صورت لیترال تعریف کرد:

let ch = 'A'
// => val ch: char = 'A'

رشته‌ها دنباله‌ای از charها هستند.

می‌توان یک char تکی را با نمایه‌گذاری (از صفر) از یک رشته به دست آورد:

"Exercism"[4] //  =>  'c'

پیمایش یک رشته در هر گام یک char برمی‌گرداند.

مثال بعدی برای راحتی از یک تابع مرتبه‌بالا و یک تابع بی‌نام استفاده می‌کند. این‌ها بعداً در برنامه‌ی درسی به‌طور کامل پوشش داده می‌شوند، اما در حال حاضر اساساً روشی مختصر برای نوشتن یک حلقه روی کاراکترهای یک رشته‌اند.

Seq.map (fun c -> c, int c) "F#"  //  =>  [('F', 70); ('#', 35)]

همان‌طور که در بالا نشان داده شد، می‌توان یک char را به مقدار int آن تبدیل کرد. این کار (حداقل بعضی وقت‌ها) برای سایر خط‌های نوشتاری هم انجام می‌شود:

Seq.map (fun c -> c, int c) "東京"  //  =>  [('東', 26481); ('京', 20140)]

هنگام مقایسه‌ی کاراکترها از Int16 زیربنایی استفاده می‌شود:

'A' < 'D'  // =>  true

همچنین می‌توان یک int را به char تبدیل کرد:

char 77  // => 'M'

کتابخانه‌ی System.Char شامل مجموعه‌ی کاملی از متدهایی است که از یک زبان .NET انتظار می‌رود، مانند تبدیل به حروف بزرگ/کوچک:

'a' |> System.Char.ToUpper  // =>  'A'

'Q' |> System.Char.ToLower  // =>  'q'

دستورالعمل‌ها

در این تمرین، مجموعه‌ای جزئی از توابع کمکی را پیاده‌سازی می‌کنید تا به یک برنامه‌نویس در پاک‌سازی اسم شناسه‌ها کمک کنید.

در ۶ مرحله، به‌تدریج توابع transform را برای تبدیل تک‌کاراکترها و clean را برای تبدیل رشته‌ها می‌سازید.

یک شناسه‌ی معتبر از صفر یا چند حرف، زیرخط، خط تیره، علامت سؤال و ایموجی تشکیل می‌شود.

اگر رشته‌ی خالی به تابع clean داده شود، باید رشته‌ی خالی برگردانده شود.

1. هر خط تیره‌ای را که به آن برخوردید با زیرخط جایگزین کنید

تابع transform را پیاده‌سازی کنید تا هر خط تیره را با زیرخط جایگزین کند.

transform '-'  // => "_"

2. همه‌ی فضای خالی را حذف کنید

همه‌ی کاراکترهای فضای خالی را حذف کنید. این شامل فضای خالی ابتدا و انتهای رشته هم می‌شود.

transform ' '  // => ""

3. camelCase را به kebab-case تبدیل کنید

تابع transform را تغییر دهید تا camelCase را به kebab-case تبدیل کند.

transform 'D'  // => "-d"

4. کاراکترهایی را که رقم هستند حذف کنید

تابع transform را تغییر دهید تا هر کاراکتری را که عددی است حذف کند.

transform '7'  // => ""

5. حروف کوچک یونانی را با علامت سؤال جایگزین کنید

تابع transform را تغییر دهید تا هر حرف یونانی در بازه‌ی 'α' تا 'ω' را با علامت سؤال جایگزین کند.

transform 'β' // => "?"

6. این عملیات را ترکیب کنید تا روی یک رشته کار کنند

تابع clean را پیاده‌سازی کنید تا این عملیات را روی کل رشته اعمال کند.

کاراکترهایی که خارج از این قواعد قرار می‌گیرند باید بدون تغییر عبور کنند.

clean "  a2b Cd-ω😀  " //  => "ab-cd_?😀"

ساختن رشته از کاراکترها

این موضوع بعداً در برنامه‌ی درسی با جزئیات بررسی می‌شود.

اما فعلاً ممکن است دانستن این نکته مفید باشد که یک تابع مرتبه بالا به اسم String.collect وجود دارد که یک مجموعه از charها را، با استفاده از تابعی که خودتان می‌دهید، به یک رشته تبدیل می‌کند.

let transform ch = $"{ch}_"
String.collect transform "abc"  // =>  "a_b_c_"
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
F# Exercism

آماده‌اید تمیز و برق‌زده را شروع کنید؟

در Exercism ثبت‌نام کنید تا F# را همراه با 18 مفهوم148 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.