Track
/
Factor
Factor
/
Esercizi
/
Studio dei caratteri
Studio dei caratteri

Studio dei caratteri

Esercizio di apprendimento

Introduzione

I caratteri in Factor sono numeri interi, ossia punti di codice Unicode, quindi gli operatori numerici <, > e = ti danno direttamente un ordinamento che distingue maiuscole e minuscole. Il vocabolario unicode aggiunge predicati che tengono conto di Unicode e la conversione di maiuscole e minuscole su singoli caratteri.

Predicati sui caratteri

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

Conversione di maiuscole e minuscole

ch>upper e ch>lower cambiano il caso di un singolo carattere. Le versioni per stringa, >upper e >lower, le applicano a ogni carattere di una stringa.

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

capitalize porta tutta una stringa in minuscolo e poi mette in maiuscolo il suo primo carattere, cioè la maiuscola iniziale di una singola parola:

"hELLO" capitalize .   ! => "Hello"

Letterali carattere

CHAR: A viene analizzato come il punto di codice intero di A. Per i caratteri con un nome, usa i nomi space, tab, \n e così via:

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

Simboli

Quando una parola deve restituire un'etichetta invece di un valore, ad esempio yes/no/maybe al posto di un booleano, dichiara ogni etichetta come un simbolo. Un simbolo è una parola che, quando viene chiamata, mette sé stessa sullo stack: due simboli risultano uguali solo quando hanno lo stesso nome.

USING: kernel ;

SYMBOLS: yes no maybe ;

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

SYMBOL: name ne dichiara uno; SYMBOLS: a b c ; ne dichiara diversi.

Istruzioni

Heidi, una giovane aliena di Forth, deve portare a termine un po' di lavoro sul suo progetto sugli alfabeti umani e ti chiede se puoi aiutarla a programmare alcune parole che le serviranno.

1. Confronta due caratteri

Definisci compare-chars in modo che prenda due caratteri e restituisca il simbolo less, greater o equal a seconda che il primo sia minore, maggiore o uguale al secondo. Il confronto deve distinguere maiuscole e minuscole.

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. Determina la dimensione di un carattere

Heidi deve sapere se un carattere è "big" (maiuscolo), "small" (minuscolo) oppure non ha alcuna dimensione. Definisci size-of-char in modo che restituisca big, small o 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. Cambia la dimensione di un carattere

A volte Heidi deve cambiare la dimensione di un carattere. Definisci change-size-of-char in modo che prenda un carattere e una dimensione desiderata (big o small) e restituisca il carattere con il caso corrispondente.

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

4. Determina il tipo di un carattere

Heidi deve anche sapere di che tipo è un carattere. Definisci type-of-char in modo che restituisca:

  • alpha per qualsiasi lettera (maiuscola o minuscola)
  • numeric per una cifra decimale
  • space per il carattere spazio
  • newline per il carattere di nuova riga
  • unknown in tutti gli altri casi
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
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Factor Exercism

Vuoi iniziare Studio dei caratteri?

Iscriviti a Exercism per imparare e padroneggiare Factor con 47 concetti163 esercizi e il mentoring di persone reali, tutto gratis.