مسیرها
/
Factor
Factor
/
تمرین‌ها
/
مطالعه‌ی کاراکتر
مطالعه‌ی کاراکتر

مطالعه‌ی کاراکتر

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

مقدمه

کاراکترهای Factor اعداد صحیح‌اند، یعنی کدپوینت‌های یونیکد، بنابراین عملگرهای عددی <، > و = مستقیماً یک ترتیب حساس به بزرگی و کوچکی حروف به شما می‌دهند. واژگان unicode نیز «محمول»های آگاه به یونیکد و تبدیل بزرگی و کوچکی یک کاراکتر را اضافه می‌کند.

محمول‌های کاراکتری

LETTER?  ( c -- ? )    ! uppercase letter
letter?  ( c -- ? )    ! lowercase letter
Letter?  ( c -- ? )    ! letter, either case
digit?   ( c -- ? )    ! decimal digit
digit>   ( c -- n )    ! the integer value of a digit char
blank?   ( c -- ? )    ! whitespace
USING: unicode ;

CHAR: A LETTER? .    ! => t
CHAR: a letter? .    ! => t
CHAR: 7 digit?  .    ! => t
CHAR: 7 digit>  .    ! => 7

تبدیل بزرگی و کوچکی حروف

ch>upper و ch>lower یک کاراکتر را تبدیل می‌کنند. >upper و >lower که در سطح رشته کار می‌کنند، آن‌ها را روی تمام کاراکترهای یک رشته اعمال می‌کنند.

CHAR: a ch>upper .   ! => 65   (which is CHAR: A)
"Hello" >upper .     ! => "HELLO"

capitalize ابتدا تمام یک رشته را به حروف کوچک تبدیل می‌کند و سپس اولین کاراکتر آن را به حرف بزرگ تبدیل می‌کند؛ یعنی همان شکل عنوان برای یک کلمهی واحد:

"hELLO" capitalize .   ! => "Hello"

لیترال‌های کاراکتری

CHAR: A به کدپوینت عددی A تفسیر می‌شود. برای کاراکترهای نام‌دار، از نام‌هایی مانند space، tab، \n و غیره استفاده کنید:

CHAR: A .        ! => 65
CHAR: space .    ! => 32
CHAR: \n .       ! => 10

نمادها

هنگامی که یک واژه باید به‌جای یک مقدار، یک برچسب برگرداند، مثلاً yes/no/maybe به‌جای یک «مقدار منطقی»، هر برچسب را به‌صورت یک «نماد» تعریف کنید. نماد واژه‌ای است که هنگام فراخوانی، خودش را روی پشته قرار می‌دهد و دو نماد تنها زمانی برابر مقایسه می‌شوند که اسمشان یکسان باشد.

USING: kernel ;

SYMBOLS: yes no maybe ;

yes .    ! => yes
yes yes = .    ! => t
yes no = .     ! => f

SYMBOL: name یک نماد را تعریف می‌کند؛ SYMBOLS: a b c ; چند نماد را تعریف می‌کند.

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

هایدی، یک موجود فضایی جوان از Forth، باید کارهایی روی پروژه‌ی الفباهای انسانی‌اش انجام دهد و از شما می‌پرسد که آیا می‌توانید در برنامه‌نویسی چند واژه که به آن‌ها نیاز دارد به او کمک کنید.

1. مقایسه‌ی دو کاراکتر

تابع compare-chars را طوری تعریف کنید که دو کاراکتر بگیرد و بسته به اینکه کاراکتر اول از دومی کوچک‌تر، بزرگ‌تر یا برابر با آن باشد، نماد less، greater یا equal را برگرداند. مقایسه را به‌صورت حساس به بزرگی و کوچکی حروف انجام دهید.

CHAR: A CHAR: B compare-chars .   ! => less
CHAR: B CHAR: A compare-chars .   ! => greater
CHAR: A CHAR: A compare-chars .   ! => equal
CHAR: A CHAR: a compare-chars .   ! => less

2. تعیین اندازه‌ی یک کاراکتر

هایدی باید بداند که یک کاراکتر big (حروف بزرگ) است، small (حروف کوچک) است یا هیچ اندازه‌ای ندارد. تابع size-of-char را طوری تعریف کنید که big، small یا no-size را برگرداند.

CHAR: A size-of-char .       ! => big
CHAR: a size-of-char .       ! => small
CHAR: 5 size-of-char .       ! => no-size
CHAR: space size-of-char .   ! => no-size

3. تغییر اندازه‌ی یک کاراکتر

هایدی گاهی لازم دارد اندازه‌ی یک کاراکتر را به اندازه‌ای دیگر تغییر دهد. تابع change-size-of-char را طوری تعریف کنید که یک کاراکتر و یک اندازه‌ی دلخواه (big یا small) بگیرد و کاراکتری با حالت حروف متناظر را برگرداند.

CHAR: a big change-size-of-char .     ! => 65   (CHAR: A)
CHAR: A small change-size-of-char .   ! => 97   (CHAR: a)

4. تعیین نوع یک کاراکتر

هایدی همچنین باید بداند کاراکتر از چه نوعی است. تابع type-of-char را طوری تعریف کنید که این مقادیر را برگرداند:

  • alpha برای هر حرف (بزرگ یا کوچک)
  • numeric برای یک رقم دهدهی
  • space برای کاراکتر فاصله
  • newline برای کاراکتر خط جدید
  • unknown در غیر این صورت
CHAR: A type-of-char .       ! => alpha
CHAR: 5 type-of-char .       ! => numeric
CHAR: space type-of-char .   ! => space
CHAR: \n type-of-char .      ! => newline
CHAR: ! type-of-char .       ! => unknown
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Factor Exercism

آماده‌اید مطالعه‌ی کاراکتر را شروع کنید؟

در Exercism ثبت‌نام کنید تا Factor را همراه با 47 مفهوم163 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.