Треки
/
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 працюють на рівні рядка тексту (англ. 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, має виконати частину роботи над своїм проєктом «Людські алфавіти» й просить допомогти їй запрограмувати кілька слів, які їй знадобляться.

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 вправи та справжнє наставництво від людей, і все це безкоштовно.