Vedi CLHS 2.4.8.17 Sharpsign Plus
Per condizionare le espressioni di lettura da ingresso, Common Lisp utilizza funzionalità expressions.
In questo caso è stato utilizzato per commentare un modulo.
È una parte del lettore. #+
controlla se l'elemento successivo, solitamente come simbolo di una parola chiave con lo stesso nome, è un membro dell'elenco *features*
. Se sì, l'elemento successivo viene letto normalmente, in caso contrario, viene saltato .. Generalmente :NIL
non è un membro di quell'elenco, quindi l'elemento viene saltato. Quindi nasconde l'espressione di Lisp. Potrebbe esserci stata un'implementazione Lisp, in cui ciò non avrebbe funzionato: NIL, Nuova implementazione di Lisp. Potrebbe avere il simbolo :NIL
nell'elenco *features*
, per indicare il nome dell'implementazione.
Caratteristiche come NIL
sono di default di leggere nel pacchetto keyword
:
#+NIL
-> cerca i :NIL
in cl:*features*
#+CL:NIL
-> cerca i CL:NIL
in cl:*features*
Esempio
(let ((string1 "#+nil foo bar")) ; string to read from
(print (read-from-string string1)) ; read from the string
(let ((*features* (cons :nil *features*))) ; add :NIL to *features*
(print (read-from-string string1))) ; read from the string
(values)) ; return no values
Esso stampa:
BAR
FOO
Nota che Common Lisp ha altri modi per commentare forme:
; (sin 3) should we use that?
#| (sin 3) should we use that?
(cos 3) or this? |#
fonte
2015-04-24 14:56:59
Come nota; sembra che 'SBCL' ignori le espressioni' # + nil ... 'anche quando' NIL' ** è ** in '* caratteristiche *'. Se scritto in un file, quindi caricato, le seguenti impronte "Nope": '(spinga nil * caratteristiche *) # + nil (formato t" NIL è in * caratteristiche * ") # -nil (formato t" Nope ")' . – Inaimathi
@Inaimathi perché l'espressione della funzione viene letta nel pacchetto di parole chiave. ': NIL' sarebbe il simbolo pertinente in' * features * '. –
@ m-n: sì. Sostituendo la prima espressione sopra con '(push: nil * features *) ...' prints 'NIL è in * features *'. – Inaimathi