Percursos
/
Common Lisp
Common Lisp
/
Exercícios
/
Níveis de registo
Níveis de registo

Níveis de registo

Exercício de aprendizagem

Introdução

Strings

Em Common Lisp, as strings são vetores de carateres. Escrevem-se como carateres rodeados de aspas duplas (por exemplo, "Hello World!").

O predicado stringp devolve verdadeiro apenas se o valor dado for uma string.

As strings podem ser divididas em substrings com a função subseq, que recebe a string, um índice inicial e, opcionalmente, um índice final. A indexação começa em zero.

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

As strings podem ser comparadas para verificar a igualdade com string=. Se as maiúsculas e minúsculas dos carateres não importarem, pode usar-se string-equal.

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

Operações como converter strings para maiúsculas, para minúsculas e capitalizá-las podem ser feitas com 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"

Instruções

Neste exercício vais escrever algum código para ajudar o Larry, o extraterrestre do Lisp, a analisar e a formatar strings de log. Estas strings de log chegam de vários sistemas e têm de ser processadas para que as suas mensagens possam ser apresentadas num painel de monitorização informativo.

As strings de log têm o formato "[<level>]: <message>". O nível é um dos seguintes valores: info, warn ou ohno.

1. Extrai a mensagem

Define uma função log-message que recebe uma string de log e devolve a mensagem que contém.

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

2. Determina a gravidade

O nível da string de log determina a sua gravidade.

  • um nível info significa uma gravidade :everything-ok
  • um nível warn significa uma gravidade :getting-worried
  • um nível ohno significa uma gravidade :run-for-cover

Define uma função log-severity que recebe uma string de log e devolve a gravidade correta.

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

3. Lidar com os caprichos da realidade

Infelizmente, às vezes as strings de log não estão formatadas corretamente. Mais concretamente, o nível de log pode não estar todo em minúsculas como indicado acima. Modifica a função log-severity para lidar com isto.

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

4. Reformatar a mensagem de log de acordo com a gravidade

Consoante a gravidade, a mensagem deve ser modificada de formas diferentes:

  • uma gravidade :everything-ok deve ter a sua mensagem alterada para tudo em minúsculas.
  • uma gravidade :getting-worried deve ter a sua mensagem alterada para que cada palavra fique com inicial maiúscula.
  • uma gravidade :run-for-cover deve ter a sua mensagem alterada para tudo em maiúsculas.

Define uma função log-format que recebe uma mensagem de log e devolve uma mensagem devidamente formatada.

(log-format "[ohno]: whoops!") ; => WHOOPS!
Editar via GitHub A ligação abre numa nova janela ou separador
Common Lisp Exercism

Estás pronto para começar Níveis de registo?

Inscreve-te no Exercism para aprenderes e dominares Common Lisp com 27 conceitos92 exercícios, e mentoria humana real, tudo grátis.