2011-11-08 17 views
5

W definicji pakietu Common Lisp, jaka jest różnica międzyCommon Lisp definicji pakietu

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

(in-package #:foo) 

i

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

(in-package :foo) 

mam na myśli. Kiedy muszę użyć znaku "#"? Wszystkie te symbole są nieprzypadkowe, prawda?

+1

Odpowiedź jest tutaj: http://stackoverflow.com/questions/7894548/why-are-uninterned-symbols-used-for-package-names-and-exports-in-common-lisp –

Odpowiedz

8

:foo to składnia symbolu słowa kluczowego, a #:foo to składnia niezainstruowanego symbolu. Kiedy symbol jest używany przede wszystkim, aby uzyskać ciąg znaków, który jest jego nazwą (jak w defpackage i in-package), wolę używać niezinoczonych symboli.

Oto inne opcje:

  • użyć symbolu słowa kluczowego; Nie podoba mi się, w jaki sposób ten symbol interpreterów słów kluczowych pojawia się w apropos i innych miejscach, używając znaków; Nie podoba mi się, jak bezinteresownie łamie to "nowoczesny" tryb Allegro, używając prostego symbolu; Nie podoba mi się, jak to zarówno symbol stażystów, praktykantów i jak go w opakowaniu potencjalnie losowej

Który styl ty czy ktoś używa to kwestia gustu.

+0

Dziękuję za odpowiedź. Przyjmę niezastosowane symbole, aby uniknąć niektórych konfliktów w przestrzeni nazw, ponieważ ten link pokazuje http://stackoverflow.com/questions/7894548/why-are-uninterned-symbols-used-for-package-names-and-exports-in -częste-seplenienie. Myślę, że to lepsze podejście. – csgui