Track
/
Common Lisp
Common Lisp
/
Esercizi
/
Studio dei caratteri
Studio dei caratteri

Studio dei caratteri

Esercizio di apprendimento

Introduzione

I caratteri

Common Lisp ha i caratteri, come gli altri linguaggi di programmazione. I caratteri sono oggetti che rappresentano un elemento all'interno di una quantità di testo (ad esempio una stringa o un flusso di testo).

I caratteri possono essere convertiti in numeri interi e viceversa. (Ma non sono numeri interi: sono un tipo a sé stante.)

I caratteri si rappresentano con #\ seguito dal loro nome. Il «nome» dei caratteri comuni come 'A' o 'b' o '9' o '!' è semplicemente quello: quindi #\A, #\b, #\9 e #\!. Alcuni caratteri non grafici, come lo spazio o la nuova riga, hanno nomi come #\Space e #\Newline.

Lo standard richiede a un'implementazione di avere solo 96 caratteri (i caratteri alfabetici latini maiuscoli e minuscoli (A-Za-z), le cifre (0-9), lo spazio (#\Space), la nuova riga (#\Newline) e la punteggiatura (ad esempio !$"'(),_-./:;?+<=>#%&*@[\]{|}`^~). Tuttavia, la maggior parte delle implementazioni ne offre di più, comprese quelle che forniscono tutti i caratteri Unicode.

Confrontare i caratteri

I caratteri possono essere confrontati per uguaglianza con char= o char-equal (quest'ultimo non distingue tra maiuscole e minuscole).

I caratteri possono essere ordinati con funzioni come char<, char>, char<=, char>= e le loro versioni che non distinguono tra maiuscole e minuscole, char-lessp e char-greaterp.

I tipi di caratteri

I caratteri possono essere classificati in tipi diversi: grafici, alfabetici, alfanumerici, cifre, maiuscoli o minuscoli. Un carattere può appartenere a più di un tipo, come un carattere alfabetico maiuscolo. Esistono predicati per ciascuno di questi tipi: graphic-char-p, alpha-char-p, alphanumericp, digit-char-p, upper-case-p e lower-case-p.

Convertire maiuscole e minuscole

Alcuni caratteri possono essere maiuscoli o minuscoli e si possono convertire dall'uno all'altro con char-upcase e char-downcase.

Istruzioni

Lewis, un giovane alieno Lisp, deve portare a termine un po' di lavoro sul proprio progetto sugli alfabeti umani e ti chiede se puoi aiutarlo a programmare alcune funzioni che gli serviranno.

1. Confrontare i caratteri

Lewis avrà bisogno di una funzione per confrontare due caratteri, stabilendo se il primo è maggiore, minore o uguale al secondo. Scrivi una funzione compare-chars che prenderà due caratteri e restituirà :greater-than, :less-than o :equal-to a seconda dei casi. La funzione deve distinguere tra maiuscole e minuscole.

2. Determinare la «dimensione» del carattere

Lewis deve sapere se un carattere è «grande» (un carattere maiuscolo) o «piccolo» (un carattere minuscolo), oppure «senza dimensione» se non è né l'uno né l'altro. Scrivi una funzione size-of-char che restituirà :big, :small o :no-size a seconda della «dimensione» del carattere:

3. Cambiare la «dimensione» del carattere

Lewis potrebbe aver bisogno di trasformare un carattere grande in piccolo, o un carattere piccolo in grande. Scrivi una funzione change-size-of-char che prende due parametri: un carattere e una dimensione desiderata (:big o :small). Deve restituire il carattere corrispondente della dimensione corretta.

4. Determinare il «tipo» di un carattere

Lewis non avrà bisogno solo di sapere qual è la «dimensione» del carattere, ma anche il suo «tipo». Scrivi una funzione type-of-char che restituirà :alpha se il carattere è alfabetico, :numeric se è numerico, :space se è uno spazio, :newline se è un carattere di nuova riga e :unknown altrimenti.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Common Lisp Exercism

Vuoi iniziare Studio dei caratteri?

Iscriviti a Exercism per imparare e padroneggiare Common Lisp con 27 concetti92 esercizi e il mentoring di persone reali, tutto gratis.