2011-12-28 11 views
7

Qualcuno sa cosa #+ e #- operatori significa in .sbclrc? Non riuscivo a trovarlo nel manuale. vedo #- in .sbclrc dopo aver installato quicklisp:operatore # + e # - in .sbclrc

#-quicklisp 
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" 
             (user-homedir-pathname)))) 
    (when (probe-file quicklisp-init) 
    (load quicklisp-init))) 

vedo anche #+ nel Manuale d'uso SBCL, ma non sono riuscito a trovare una spiegazione della loro funzionalità. Sembra qualcosa correlato al caricamento di singoli moduli.

Sono solo per implementazione SBCL o parte di Common Lisp?

risposta

6

Fanno parte del Common Lisp READ er. L'idea è che "nascondono" il testo a meno che una determinata caratteristica (spesso una determinata implementazione CL) sia (#+) o non sia disponibile (#-).

Questi sono probabilmente il concetto CL più come il/C++ idea C di "macro testuali" - concettualmente e pragmaticamente, sono molto simili a qualcosa di simile

#ifdef __MSVC12__ 
#ifndef __cplusplus__ 

... e simili. Nascondono letteralmente bit di codice cource in entrata dallo READ er, quindi non vengono mai lessati - analizzati - interpretati - compilati - valutati - internati - nada. Semplicemente cessano di esistere se l'implementazione CL in esecuzione non è dotata di funzionalità/è l'implementazione "sbagliata/qualsiasi flag".

+0

Sapete dove posso trovare la documentazione per questo? Mi chiedo se ci sono altre funzionalità di READER che non conosco. – sudo

+3

In generale, qualsiasi cosa con un numero iniziale è qualcosa di speciale nel lettore; controlla l'indice CLHS sotto #, a partire da http://www.lispworks.com/documentation/HyperSpec/Front/X_Mast_9.htm – BRFennPocock

13

Questa è una funzionalità generale di Common Lisp, non solo SBCL.

C'è una variabile cl:*features* che elenca i simboli per 'caratteristiche' che dovrebbero essere presenti nel sistema Lisp al momento. Le caratteristiche tipiche sono: endian, implementazione, sottosistemi, processore, estensioni, dialetto Lisp e altro ancora.

In un file Lisp l'espressione #+quicklisp(foo) significa: lettura ed esecuzione (foo) solo se la funzione quicklisp è presente nella lista delle caratteristiche *features*.

In un file Lisp l'espressione #-quicklisp(foo) significa: lettura ed esecuzione (foo) solo se la funzione quicklisp non è presente nella lista delle caratteristiche *features*.

Questa funzione viene spesso utilizzata per nascondere o mostrare codice di implementazione specifico per altre implementazioni di Common Lisp.

Vedere la documentazione: