Track
/
Common Lisp
Common Lisp
/
Esercizi
/
Livelli di log
Livelli di log

Livelli di log

Esercizio di apprendimento

Introduzione

Stringhe

In Common Lisp le stringhe sono array di caratteri. Si scrivono come caratteri racchiusi tra virgolette doppie (ad esempio "Hello World!").

Il predicato stringp restituisce vero solo se il valore dato è una stringa.

Le stringhe si possono dividere in sotto-stringhe con la funzione subseq, che prende la stringa, un indice di inizio e, facoltativamente, un indice di fine. Gli indici partono da zero.

(subseq "Hello World" 1 5)   ; => "ello"
(subseq "skip to the end" 5) ; => "to the end"

Le stringhe si possono confrontare per uguaglianza con string=. Se le maiuscole e le minuscole dei caratteri vanno ignorate, si può usare string-equal.

(string= "macaroni" "macaroni")      ; => T
(string= "macaroni" "MACARONI")      ; => NIL
(string-equal "macaroni" "MACARONI") ; => T

Operazioni come la conversione in maiuscolo, la conversione in minuscolo e la capitalizzazione delle stringhe si possono fare con string-upcase, string-downcase e string-capitalize.

(string-upcase "not too loud")                ; => "NOT TOO LOUD"
(string-downcase "YELL IT FROM THE ROOFTOPS") ; => "yell it from the rooftops"
(string-capitalize "practical COMMON LiSP")   ; => "Practical Common Lisp"

Istruzioni

In questo esercizio scriverai del codice per aiutare Larry the Lisp Alien ad analizzare e formattare le stringhe di log. Queste stringhe di log arrivano da vari sistemi e devono essere elaborate, così che i loro messaggi possano comparire su un pannello di monitoraggio informativo.

Le stringhe di log hanno la forma "[<level>]: <message>". Il livello sarà uno dei seguenti valori: info, warn o ohno.

1. Estrai il messaggio

Definisci una funzione log-message che prende una stringa di log e restituisce il messaggio che contiene.

(log-message "[ohno]: whoops!") ; => "whoops!"

2. Determina la gravità

Il livello della stringa di log ne determina la gravità.

  • un livello info corrisponde a una gravità di :everything-ok
  • un livello warn corrisponde a una gravità di :getting-worried
  • un livello ohno corrisponde a una gravità di :run-for-cover

Definisci una funzione log-severity che prende una stringa di log e restituisce la gravità corretta.

(log-severity "[warn]: might want to get that checked") ; => :getting-worried

3. Fare i conti con i capricci della realtà

Purtroppo a volte le stringhe di log non sono sempre formattate correttamente. In particolare, il livello del log potrebbe non essere tutto in minuscolo come indicato sopra. Modifica log-severity per gestire questa situazione.

(log-severity "[WaRn]: string case system failing") ; => :getting-worried

4. Riformatta il messaggio di log in base alla gravità

A seconda della gravità, il messaggio deve essere modificato in modi diversi:

  • una gravità di :everything-ok deve avere il messaggio trasformato tutto in minuscolo.
  • una gravità di :getting-worried deve avere il messaggio trasformato con ogni parola che inizia con la maiuscola.
  • una gravità di :run-for-cover deve avere il messaggio trasformato tutto in maiuscolo.

Definisci una funzione log-format che prende un messaggio di log e restituisce un messaggio formattato correttamente.

(log-format "[ohno]: whoops!") ; => WHOOPS!
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Common Lisp Exercism

Vuoi iniziare Livelli di log?

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