2011-11-08 15 views
5

In Common Lisp definizione del pacchetto, qual è la differenza traCommon Lisp definizione pacchetto

(defpackage #:foo 
    (:use :cl) 
    (:export #:bar 
     #:baz)) 

(in-package #:foo) 

e

(defpackage :foo 
    (:use :cl) 
    (:export :bar 
     :baz)) 

(in-package :foo) 

voglio dire. Quando devo usare il carattere "#"? Tutti questi simboli non sono accessibili, giusto?

+1

La risposta è qui: http://stackoverflow.com/questions/7894548/why-are-uninterned-symbols-used-for-package-names-and-exports-in-common-lisp –

risposta

8

:foo è la sintassi per un simbolo di parola chiave e #:foo è la sintassi per un simbolo di assenza. Quando un simbolo viene utilizzato principalmente per ottenere la stringa che è il suo nome (come in defpackage e in-package), preferisco utilizzare i simboli non integrati.

Qui ci sono le altre opzioni:

  • utilizzare un simbolo parola chiave; Non mi piace come questi simboli parola chiave stagisti che appaiono in apropos e in altri luoghi
  • utilizzare una stringa; Non mi piace come questo interrompa gratuitamente la modalità "moderna" di Allegro
  • utilizzare un semplice simbolo; Non mi piace come questo sia stagisti un simbolo, e come stagisti in un pacchetto potenzialmente casuale

Quale stile si o chiunque altro usa è una questione di gusto.

+0

Grazie per il risposta. Adotterò i simboli non integrati per evitare alcune collisioni nello spazio dei nomi, poiché questo link mostra http://stackoverflow.com/questions/7894548/why-are-uninterned-symbols-used-for-package-names-and-exports-in -common-lisp. Penso che sia l'approccio migliore. – csgui