Треки
/
Common Lisp
Common Lisp
/
Вправи
/
Рівні журналу
Рівні журналу

Рівні журналу

Навчальна вправа

Вступ

Рядки

У Common Lisp рядки тексту (англ. string) - це вектори символів. Їх записують як символи, узяті в подвійні лапки (напр. "Hello World!").

Предикат stringp поверне правду, лише якщо передане значення є рядком тексту.

Рядки тексту можна розбивати на підрядки за допомогою функції subseq, яка приймає рядок, початковий індекс і, за бажанням, кінцевий індекс. Індексація починається з нуля.

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

Рядки тексту можна порівнювати на рівність за допомогою string=. Якщо регістр символів потрібно ігнорувати, можна використати string-equal.

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

Операції на кшталт переведення рядків тексту у верхній регістр, у нижній регістр і написання слів з великої літери можна виконати за допомогою string-upcase string-downcase і 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"

Вказівки

У цій вправі ми напишемо трохи коду, щоб допомогти Ларрі, прибульцю з Ліспу, розбирати й форматувати рядки журналу (англ. string). Ці рядки журналу надходять із різних систем, і їх потрібно обробити, щоб їхні повідомлення можна було показати на інформативному дисплеї моніторингу.

Рядки журналу мають вигляд "[<level>]: <message>". Рівень буде одним із таких значень: info, warn або ohno.

1. Витягти повідомлення

Визначте функцію log-message, яка приймає рядок журналу й повертає повідомлення, що в ньому міститься.

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

2. Визначити серйожність

Рівень рядка журналу визначає його серйозність.

  • рівень info означає серйозність :everything-ok
  • рівень warn означає серйозність :getting-worried
  • рівень ohno означає серйозність :run-for-cover

Визначте функцію log-severity, яка приймає рядок журналу й повертає правильну серйозність.

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

3. Як упоратися з примхами реальності

На жаль, іноді рядки журналу відформатовано неправильно. Зокрема, рівень журналу може бути не повністю в нижньому регістрі, як зазначено вище. Змініть log-severity, щоб вона це враховувала.

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

4. Переформатування повідомлення журналу відповідно до серйозності

Залежно від серйозності повідомлення потрібно змінювати по-різному:

  • якщо серйозність :everything-ok, повідомлення потрібно перевести в нижній регістр.
  • якщо серйозність :getting-worried, кожне слово в повідомленні потрібно написати з великої літери.
  • якщо серйозність :run-for-cover, повідомлення потрібно перевести у верхній регістр.

Визначте функцію log-format, яка приймає повідомлення журналу й повертає належно відформатоване повідомлення.

(log-format "[ohno]: whoops!") ; => WHOOPS!
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Common Lisp Exercism

Час розпочати Рівні журналу?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Common Lisp, а також 27 концепцій92 вправи та справжнє наставництво від людей, і все це безкоштовно.