محارف 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، إلى إنجاز بعض العمل في مشروعها عن الأبجديات البشرية، وتسألك إن كان بإمكانك مساعدتها في برمجة بعض الكلمات التي ستحتاجها.
عرّف 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
تحتاج هيدي إلى معرفة ما إذا كان الحرف "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
تحتاج هيدي أحيانًا إلى قلب حرف إلى حجم مختلف. عرّف 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)
تحتاج هيدي أيضًا إلى معرفة نوع الحرف. عرّف 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
سجّل في Exercism لتتعلّم وتتقن Factor عبر 47 مفهومًا163 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.