Percursos
/
Factor
Factor
/
Exercícios
/
Estudo de carateres
Estudo de carateres

Estudo de carateres

Exercício de aprendizagem

Introdução

Os carateres em Factor são números inteiros (pontos de código Unicode), por isso os operadores numéricos <, >, = dão-te diretamente uma ordenação que distingue maiúsculas de minúsculas. O vocabulário unicode acrescenta predicados que têm em conta o Unicode e a conversão de maiúsculas e minúsculas de um único caráter.

Predicados de carateres

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 convertem um único caráter. As operações ao nível da string, >upper e >lower, aplicam-nas a cada caráter de uma string.

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

capitalize passa uma string inteira para minúsculas e depois põe o primeiro caráter em maiúscula, ou seja, a capitalização de título de uma única palavra:

"hELLO" capitalize .   ! => "Hello"

Literais de carateres

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

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

Símbolos

Quando uma palavra precisa de devolver uma etiqueta em vez de um valor, por exemplo yes/no/maybe em vez de um Boolean, declara cada etiqueta como um símbolo. Um símbolo é uma palavra que se coloca a si própria na pilha quando é chamada, e dois símbolos só são considerados 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

A Heidi, uma jovem alienígena de Forth, precisa de adiantar trabalho no seu projeto de alfabetos humanos e pergunta-te se a podes ajudar a programar algumas palavras de que vai precisar.

1. Comparar dois carateres

Define compare-chars para receber dois carateres e devolver o símbolo less, greater ou equal, conforme o primeiro seja menor que, maior que ou igual ao segundo. A comparação distingue 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 caráter

A Heidi precisa de saber se um caráter é "big" (maiúsculo), "small" (minúsculo) ou se não tem tamanho. Define size-of-char para devolver 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 caráter

Por vezes, a Heidi precisa de mudar um caráter para um tamanho diferente. Define change-size-of-char para receber um caráter e um tamanho pretendido (big ou small) e devolver o caráter com a 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 caráter

A Heidi também precisa de saber que tipo de caráter é. Define type-of-char para devolver:

  • alpha para qualquer letra (maiúscula ou minúscula)
  • numeric para um algarismo decimal
  • space para o caráter de espaço
  • newline para o caráter 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 A ligação abre numa nova janela ou separador
Factor Exercism

Estás pronto para começar Estudo de carateres?

Inscreve-te no Exercism para aprenderes e dominares Factor com 47 conceitos163 exercícios, e mentoria humana real, tudo grátis.