Общее определение пакета Lisp - PullRequest
7 голосов
/ 08 ноября 2011

В определении пакета Common Lisp какая разница между

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

(in-package #:foo)

и

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

(in-package :foo)

Я имею в виду.Когда я должен использовать символ "#"?Все эти символы не имеют значения, верно?

1 Ответ

10 голосов
/ 08 ноября 2011

:foo - это синтаксис для ключевого символа, а #:foo - это синтаксис для неустранимого символа.Когда символ используется в первую очередь для получения строки, которая является его именем (как в defpackage и in-package), я предпочитаю использовать непереданные символы.

Вот другие варианты:

  • использовать символ ключевого слова;Мне не нравится, как это ключевые слова интернов, которые появляются в apropos и других местах
  • используют строку;Мне не нравится, как это бесполезно нарушает «современный» режим Аллегро
  • использовать простой символ;Мне не нравится, как это интернирует символ, и как оно интернирует его в потенциально случайном пакете

Какой стиль вы или кто-либо другой использует - дело вкуса

...