Common Lisp tiene caracteres como otros lenguajes de programación. Los caracteres son objetos que representan un elemento dentro de una cantidad de texto (por ejemplo, un string o un flujo de texto).
Los caracteres se pueden convertir a números enteros y desde ellos. (Pero no son números enteros: son un tipo distinto).
Los caracteres se representan como #\ seguido de su nombre.
El «nombre» de los caracteres comunes como «A», «b», «9» o «!» es simplemente ese: así, #\A, #\b, #\9 y #\!.
Algunos caracteres no gráficos, como el espacio o el salto de línea, tienen nombres como #\Space y #\Newline.
El estándar solo exige que una implementación tenga 96 caracteres (los caracteres alfabéticos latinos en mayúscula y minúscula (A-Za-z), los dígitos (0-9), el espacio (#\Space), el salto de línea (#\Newline) y la puntuación (por ejemplo, !$"'(),_-./:;?+<=>#%&*@[\]{|}`^~)).
Sin embargo, la mayoría de las implementaciones ofrecen más que eso, incluidas las que proporcionan todos los caracteres Unicode.
Los caracteres se pueden comparar por igualdad con char= o char-equal (este último no distingue entre mayúsculas y minúsculas).
Los caracteres se pueden ordenar con funciones como char<, char>, char<=, char>= y sus versiones que no distinguen entre mayúsculas y minúsculas, char-lessp y char-greaterp.
Los caracteres se pueden clasificar en distintos tipos: gráficos, alfabéticos, alfanuméricos, dígitos, mayúsculas o minúsculas.
Un carácter puede ser de más de un tipo, como un carácter alfabético en mayúscula.
Hay predicados para cada uno de estos tipos: graphic-char-p, alpha-char-p, alphanumericp, digit-char-p, upper-case-p y lower-case-p.
Algunos caracteres pueden ser mayúsculas o minúsculas y se pueden convertir entre sí con char-upcase y char-downcase.
Lewis, un joven Lisp Alien, necesita avanzar en su proyecto de alfabetos humanos y te pregunta si puedes ayudarle a programar algunas funciones que va a necesitar.
Lewis necesitará una función que compare dos caracteres y determine si el primero es mayor que, menor que o igual que el segundo.
Escribe una función compare-chars que tome dos caracteres y evalúe a :greater-than, :less-than o :equal-to según corresponda.
La función debe comparar distinguiendo entre mayúsculas y minúsculas.
Lewis necesita saber si un carácter es «grande» (un carácter en mayúscula), «pequeño» (un carácter en minúscula) o «sin tamaño» si no es ninguna de las dos cosas.
Escribe una función size-of-char que evalúe a :big, :small o :no-size según el «tamaño» del carácter:
Es posible que Lewis necesite convertir un carácter grande en pequeño, o uno pequeño en grande.
Escribe una función change-size-of-char que tome dos parámetros: un carácter y un tamaño deseado (:big o :small).
Debe evaluar al carácter correspondiente con el tamaño correcto.
Lewis no solo necesitará saber cuál es el «tamaño» del carácter, sino también su «tipo».
Escribe una función type-of-char que evalúe a :alpha si el carácter es alfabético, :numeric si es un carácter numérico, :space si es un carácter de espacio, :newline si es un carácter de salto de línea y :unknown en cualquier otro caso
Regístrate en Exercism para aprender y dominar Common Lisp con 27 conceptos92 ejercicios y mentoría humana real, todo gratis.