Trilhas
/
Factor
Factor
/
Exercícios
/
Estudo de caracteres
Estudo de caracteres

Estudo de caracteres

Exercício de aprendizagem

Introdução

Em Factor, os caracteres são números inteiros, isto é, pontos de código Unicode. Por isso, as comparações numéricas <, >, = já oferecem uma ordenação sensível a maiúsculas e minúsculas. O vocabulário unicode acrescenta predicados que reconhecem Unicode e a conversão de maiúsculas e minúsculas de um único caractere.

Predicados de caracteres

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

Conversão de maiúsculas e minúsculas

ch>upper e ch>lower invertem um único caractere. Já >upper e >lower, no nível de string, aplicam essa conversão a todos os caracteres de uma string.

CHAR: a ch>upper .   ! => 65   (which is CHAR: A)
"Hello" >upper .     ! => "HELLO"

capitalize deixa uma string inteira em minúsculas e depois coloca seu primeiro caractere em maiúscula, o que dá o formato de título de uma única palavra:

"hELLO" capitalize .   ! => "Hello"

Literais de caractere

CHAR: A é interpretado como o ponto de código inteiro de A. Para caracteres com nome, use os nomes space, tab, \n, etc.:

CHAR: A .        ! => 65
CHAR: space .    ! => 32
CHAR: \n .       ! => 10

Símbolos

Quando uma palavra precisa retornar uma tag em vez de um valor, digamos yes/no/maybe no lugar de um Boolean, declare cada tag como um símbolo. Um símbolo é uma palavra que empilha a si mesma quando é chamada, e dois símbolos só são iguais quando têm o mesmo nome.

USING: kernel ;

SYMBOLS: yes no maybe ;

yes .    ! => yes
yes yes = .    ! => t
yes no = .     ! => f

SYMBOL: name declara um; SYMBOLS: a b c ; declara vários.

Instruções

Heidi, uma jovem alienígena de Forth, precisa adiantar um trabalho em seu projeto de alfabetos humanos e pergunta se você pode ajudá-la a programar algumas palavras de que vai precisar.

1. Comparar dois caracteres

Defina compare-chars para receber dois caracteres e retornar o símbolo less, greater ou equal, dependendo de o primeiro ser menor que, maior que ou igual ao segundo. Compare diferenciando maiúsculas de minúsculas.

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. Determinar o tamanho de um caractere

Heidi precisa saber se um caractere é "big" (maiúsculo), "small" (minúsculo) ou não tem tamanho. Defina size-of-char para retornar big, small ou 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. Alterar o tamanho de um caractere

Às vezes, Heidi precisa mudar um caractere para outro tamanho. Defina change-size-of-char para receber um caractere e um tamanho desejado (big ou small) e retornar o caractere na caixa correspondente.

CHAR: a big change-size-of-char .     ! => 65   (CHAR: A)
CHAR: A small change-size-of-char .   ! => 97   (CHAR: a)

4. Determinar o tipo de um caractere

Heidi também precisa saber que tipo de caractere é. Defina type-of-char para retornar:

  • alpha para qualquer letra (maiúscula ou minúscula)
  • numeric para um dígito decimal
  • space para o caractere de espaço
  • newline para o caractere de nova linha
  • unknown caso contrário
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
Editar via GitHub O link abre em uma nova janela ou aba
Factor Exercism

Tudo pronto para começar Estudo de caracteres?

Crie sua conta no Exercism para aprender e dominar Factor com 47 conceitos163 exercícios e mentoria humana de verdade, tudo de graça.