Символи у 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 працюють на рівні рядка тексту (англ. string) і застосовують їх до кожного символу рядка тексту.
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 замість булевого значення (англ. Boolean), оголошуємо кожен тег як позначку. Позначка - це слово, яке при виклику кладе на стек саму себе, і дві позначки вважаються рівними, лише коли мають те саме імʼя.
USING: kernel ;
SYMBOLS: yes no maybe ;
yes . ! => yes
yes yes = . ! => t
yes no = . ! => f
SYMBOL: name оголошує одну; SYMBOLS: a b c ; оголошує кілька.
Гайді, юна Forth Alien, має виконати частину роботи над своїм проєктом «Людські алфавіти» й просить допомогти їй запрограмувати кілька слів, які їй знадобляться.
Визначте 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 вправи та справжнє наставництво від людей, і все це безкоштовно.