المسارات
/
Factor
Factor
/
التمارين
/
دراسة المحارف
دراسة المحارف

دراسة المحارف

تمرين تعلّمي

مقدمة

محارف Factor هي أعداد صحيحة، أي نقاط ترميز Unicode، لذا تمنحك العوامل العددية < و> و= ترتيبًا حساسًا لحالة الأحرف مباشرةً. وتضيف مفردات unicode دوال فحص تراعي 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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.