2017-02-03 3 views
0

Кажется, что делаем intern ... Возможно (intern (read sym)). Но для чего это? Я вижу, что он используется как:Что такое александрия: обеспечить символ?

(if (keywordp x) 
    (alexandria:ensure-symbol x) 
    x) 

В каком случае может быть что-то ключевым словом, но не символом?

+1

В средах разработки Lisp обычно можно использовать комбинацию клавиш meta-. на символ, чтобы перейти к его исходному коду. Некоторые среды разработки также поддерживают '(ed 'some-function-name)', чтобы открыть окно редактора с соответствующим исходным кодом. –

ответ

2

A keyword, конечно, всегда symbol.

Функция в вопросе defined, как

(declaim (inline ensure-symbol)) 
(defun ensure-symbol (name &optional (package *package*)) 
    "Returns a symbol with name designated by NAME, accessible in package 
designated by PACKAGE. If symbol is not already accessible in PACKAGE, it is 
interned there. Returns a secondary value reflecting the status of the symbol 
in the package, which matches the secondary return value of INTERN. 
Example: 
    (ensure-symbol :cons :cl) => cl:cons, :external 
" 
    (intern (string name) package)) 

Т.е., ваш фрагмент кода делает это: если x является keywordsymbol интернирован в KEYWORD пакете), то она возвращает «обычный» символ с то же имя интернировано в текущем пакете *package* (в противном случае оно возвращает x).