У Common Lisp є символи, як і в інших мовах програмування. Символи - це обʼєкти, які представляють елемент тексту (наприклад, рядок тексту (англ. string) або текстовий потік).
Символи можна перетворювати на цілі числа і назад. (Але вони не цілі числа, це окремий тип.)
Символи записуються як #\, за яким іде його назва.
«Назвою» для звичайних символів, як-от «A», «b», «9» чи «!», є просто сам символ: тобто #\A, #\b, #\9 і #\!.
Деякі неграфічні символи, як-от пробіл чи новий рядок, мають такі назви, як #\Space і #\Newline.
Стандарт вимагає від реалізації мати лише 96 символів (великі й малі літери латинської абетки (A-Za-z), цифри (0-9), пробіл (#\Space), новий рядок (#\Newline) і пунктуацію (наприклад, !$"'(),_-./:;?+<=>#%&*@[\]{|}`^~).
Однак більшість реалізацій пропонують більше, зокрема реалізації, які надають усі символи Unicode.
Символи можна порівнювати на рівність за допомогою char= або char-equal (остання не враховує регістр).
Символи можна впорядковувати за допомогою таких функцій, як char<, char>, char<=, char>=, та їхніх версій, що не враховують регістр: char-lessp і char-greaterp.
Символи можна поділити на різні типи: графічні, літерні, буквено-цифрові, цифри, великі або малі.
Символ може належати до кількох типів, наприклад бути великою літерою.
Для кожного з цих типів є предикати: graphic-char-p, alpha-char-p, alphanumericp, digit-char-p, upper-case-p і lower-case-p.
Деякі символи можуть бути великими або малими, і їх можна перетворювати між цими формами за допомогою char-upcase та char-downcase.
Льюїс, молодий Lisp Alien, має виконати частину роботи над своїм проєктом «Людські абетки» й питає, чи не допоможемо ми їм запрограмувати кілька потрібних функцій.
Льюїсу знадобиться функція для порівняння двох символів, яка визначає, чи перший символ є greater-than, less-than або equal-to щодо другого.
Напишіть функцію compare-chars, яка прийматиме два символи й відповідно повертатиме :greater-than, :less-than або :equal-to.
Функція має порівнювати з урахуванням регістру.
Льюїсу потрібно знати, чи символ є «big» (великий символ), чи «little» (малий символ), чи «no-size», якщо він ні те, ні інше.
Напишіть функцію size-of-char, яка повертатиме :big, :small або :no-size залежно від «розміру» символу:
Льюїсу може знадобитися зробити великий символ малим, а малий великим.
Напишіть функцію change-size-of-char, яка приймає два параметри: символ і бажаний розмір (:big або :small).
Вона має повертати відповідний символ потрібного розміру.
Льюїсу знадобиться знати не лише «розмір» символу, а й «тип» символу.
Напишіть функцію type-of-char, яка повертатиме :alpha, якщо символ є літерою, :numeric, якщо це цифра, :space, якщо це пробіл, :newline, якщо це символ нового рядка, і :unknown в усіх інших випадках
Зареєструйтеся на Exercism, щоб вивчати й опановувати Common Lisp, а також 27 концепцій92 вправи та справжнє наставництво від людей, і все це безкоштовно.