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 eso: 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 (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 ofrecerán más que eso, incluidas las que proporcionan todos los caracteres Unicode.
Los caracteres se pueden comparar para ver si son iguales 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 pertenecer a 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 ambas formas con char-upcase y char-downcase.
Lewis, un joven Alien de Lisp, necesita avanzar algo del trabajo de su proyecto de alfabetos humanos y te pregunta si puedes ayudarle a programar algunas funciones que va a necesitar.
Lewis necesitará una función para comparar dos caracteres, que determine si el primero es mayor que, menor que o igual al segundo.
Escribe una función compare-chars que reciba 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» (una letra mayúscula) o «pequeño» (una letra minúscula), o «sin tamaño» si no es ninguna de las dos.
Escribe una función size-of-char que evalúe a :big, :small o :no-size según el «tamaño» del carácter:
Puede 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 recibe 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 necesita saber cuál es el «tamaño» de un carácter, sino también su «tipo».
Escribe una función type-of-char que evalúe a :alpha si el carácter es un carácter 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 nueva 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.