Em Common Lisp, strings são vetores de caracteres. Elas são escritas como caracteres entre aspas duplas (por exemplo "Hello World!").
O predicado stringp retornará verdadeiro apenas se o valor fornecido for uma string.
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"
Strings podem ser comparadas para verificar igualdade com string=. Se maiúsculas e minúsculas não importarem, use string-equal.
(string= "macaroni" "macaroni") ; => T
(string= "macaroni" "MACARONI") ; => NIL
(string-equal "macaroni" "MACARONI") ; => T
Operações como colocar strings em maiúsculas, em 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"
Neste exercício, você vai escrever um pouco de código para ajudar o Larry, o Alien Lisp, a processar e formatar strings de log. Essas strings de log chegam de vários sistemas e precisam ser processadas para que suas mensagens possam ser exibidas em um painel de monitoramento informativo.
As strings de log têm o formato "[<level>]: <message>". O level será um dos seguintes valores: info, warn ou ohno.
Defina uma função log-message que recebe uma string de log e retorna a mensagem contida nela.
(log-message "[ohno]: whoops!") ; => "whoops!"
O level da string de log determina a sua gravidade.
info significa uma gravidade :everything-ok
warn significa uma gravidade :getting-worried
ohno significa uma gravidade :run-for-cover
Defina uma função log-severity que recebe uma string de log e retorna a gravidade correta.
(log-severity "[warn]: might want to get that checked") ; => :getting-worried
Infelizmente, às vezes as strings de log não estão sempre formatadas corretamente. Mais especificamente, o log level pode não estar todo em letras minúsculas como especificado acima. Modifique log-severity para lidar com isso.
(log-severity "[WaRn]: string case system failing") ; => :getting-worried
Dependendo da gravidade, a mensagem deve ser modificada de maneiras diferentes:
:everything-ok deve ter sua mensagem alterada para tudo em letras minúsculas.:getting-worried deve ter sua mensagem alterada para ter cada palavra com a primeira letra maiúscula.:run-for-cover deve ter sua mensagem alterada para tudo em letras maiúsculas.Defina uma função log-format que recebe uma mensagem de log e retorna uma mensagem formatada corretamente.
(log-format "[ohno]: whoops!") ; => WHOOPS!
Crie sua conta no Exercism para aprender e dominar Common Lisp com 27 conceitos92 exercícios e mentoria humana de verdade, tudo de graça.