Per le sessioni interattive, l'insensibilità del caso era quella predefinita quando veniva definito lo standard Common Lisp.
Ma, ciò che veramente accade è che il lettore Common Lisp converte tutti i simboli in upcase prima di internarlo e valutarlo. Questo è il valore predefinito, ma puoi sempre modificarlo se lo desideri.
Gli oggetti *readtable*
dispongono di un attributo, readtable-case, che controlla il modo in cui il lettore internizza e valuta i simboli letti. È possibile setf readtable-case
a :upcase
(predefinito), :downcase
, :preserve
, :invert
.
Per impostazione predefinita, readtable-case
è impostato su :upcase
, che causa la conversione di tutti i simboli in upcase.
Se si desidera la sensibilità caso, si dovrebbe fare
(setf (readtable-case *readtable*) :invert)
=> :invert
A prima vista, si potrebbe pensare che sarebbe stato meglio scegliere il: preservare la possibilità, ma ha qualche problema minore: tutti i simboli , come definito dallo standard, deve essere aggiornato. Quindi, si avrebbe caso sensibilità per i simboli definiti dai solo tu, e dovrebbe fare di scrittura:
* (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
L'opzione :downcase
è l'opposto del difetto, la conversione di tutto per downcase originali, senza alcun maiuscole e minuscole.
Ma con :invert
, i simboli si scrive nel codice sorgente, come defun
, setf
la funzione hi
, vengono convertiti a upcase, e qualsiasi simbolo in CamelCase
si conserva come è originaly:
* (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 quali linguaggi si interfaccia CL? – wrongusername
All'epoca? Probabilmente Fortran. Ricorda che Common Lisp e i suoi predecessori sono stati progettati molto tempo fa in una galassia molto, molto lontano. –
Non era particolarmente Fortran, era che spesso l'härdware (il Teletype) era maiuscolo e il sistema operativo stava usando le lettere maiuscole. Così i linguaggi di programmazione hanno anche usato lettere maiuscole: PL/1, Cobol, Fortran, Lisp, ... È stato piuttosto doloroso modificare i comandi sensibili al maiuscolo/minuscolo su un terminale collegato tramite connessioni lente in modalità di modifica riga, ... –