کاراکترهای 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، باید کارهایی روی پروژهی الفباهای انسانیاش انجام دهد و از شما میپرسد که آیا میتوانید در برنامهنویسی چند واژه که به آنها نیاز دارد به او کمک کنید.
تابع 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