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.
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 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"
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
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.
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.
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
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
À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)
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 decimalspace para o caractere de espaçonewline para o caractere de nova linhaunknown caso contrárioCHAR: 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
Crie sua conta no Exercism para aprender e dominar Factor com 47 conceitos163 exercícios e mentoria humana de verdade, tudo de graça.