2011-11-08 45 views
5

在Common Lisp的包定義,是什麼Common Lisp的包定義

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

(in-package #:foo) 

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

(in-package :foo) 

我的意思的區別。當我必須使用「#」字符?所有這些符號都是不干擾的,對嗎?

+1

答案在這裏:http://stackoverflow.com/questions/7894548/why-are-uninterned-symbols-used-for-package-names-and-exports-in-common-lisp –

回答

8

:foo是關鍵字符號的語法,而#:foo是未插入符號的語法。當一個符號主要用於獲取其名稱的字符串時(如defpackagein-package),我更願意使用無間斷符號。

這裏有其它選項:

  • 使用關鍵字符號;我不喜歡如何在apropos和其他地方顯示這個實習生關鍵字符號
  • 使用字符串;我不喜歡這樣無理地打破Allegro的「現代」模式
  • 使用普通符號;我不喜歡這如何既實習生的象徵,它是如何實習生它在一個潛在的隨機包裝

哪種樣式或其他人使用的是口味的問題。

+0

謝謝你的回答。我將採用uninterned符號來避免名稱空間中的一些衝突,因爲此鏈接顯示http://stackoverflow.com/questions/7894548/why-are-uninterned-symbols-used-for-package-names-and-exports-in -common-lisp。我認爲是更好的方法。 – csgui