Para sesiones interactivas, la falta de sensibilidad de mayúsculas solía ser la predeterminada cuando se definió el estándar Common Lisp.
Pero, lo que realmente sucede es que el lector de Common Lisp convierte todos los símbolos en upcase antes de internarlos y evaluarlos. Ese es el valor predeterminado, pero siempre puede cambiarlo si lo desea.
Objetos *readtable*
tiene un atributo, readtable-case, que controla cómo el lector interna y evalúa los símbolos leídos. puede setf readtable-case
a :upcase
(predeterminado), :downcase
, :preserve
, :invert
.
De forma predeterminada, el readtable-case
se establece en :upcase
, lo que hace que todos los símbolos se conviertan en upcase.
Si desea mayúsculas y minúsculas, que debe hacer
(setf (readtable-case *readtable*) :invert)
=> :invert
A primera vista, se podría pensar que sería mejor elegir la opción: conservar, pero tiene algún problema de menor importancia: todos los símbolos , tal como se define en la norma, debe estar al revés. Por lo tanto, tendría mayúsculas y minúsculas a los símbolos definidos por sólo usted, y que tendría que hacer escritura:
* (DEFUN hi() "Hi!")
=> hi
* (SETF a-number 5)
=> a-number
* (HI)
=> ;error: the stored function is #'HI in the *readtable*, but by
; calling (HI) you try to acces a function named #'hi(downcase), which
; gives an error
* A-NUMBER
=> ;error: same for the variable
* (hi)
=> "Hi!"
* a-number
=> 5
La opción :downcase
es lo contrario de la opción predeterminada, la conversión de todo para downcase, que le da ninguna sensibilidad caso.
Pero con :invert
, los símbolos se escriben en el código fuente, como defun
, setf
la función hi
, se convierten a upcase, y cualquier símbolo en CamelCase
se conserva como es originalmente:
* (setf (readtable-case *readtable*) :invert)
=> :invert
* (defun Hi() "Hi!")
=> Hi
* (Hi)
=> "Hi!"
* (eq 'Hi 'hi)
=> nil
* (eq 'HI 'hi)
=> nil
* (eq 'Hi 'Hi)
=> t
Hm, ¿Con qué idiomas se relaciona CL? – wrongusername
En ese momento? Probablemente Fortran. Recuerde que Common Lisp y sus predecesores fueron diseñados hace mucho tiempo en una galaxia muy, muy lejana. –
No fue especialmente Fortran, era que a menudo el härdware (el Teletipo) estaba en mayúscula y el SO estaba usando mayúsculas. Así, los lenguajes de programación también usaron mayúsculas: PL/1, Cobol, Fortran, Lisp, ... Fue un poco doloroso editar comandos sensibles a mayúsculas y minúsculas en un terminal conectado a través de conexiones lentas en modos de edición de línea, ... –