2017-02-03 3 views
0

intern 무엇을 할 것 같습니다. 어쩌면 (intern (read sym)). 그러나 그것은 무엇을위한 것입니까? 나는 다음과 같이 사용되는 것을 본다 :알렉산드리아 란 무엇입니까?

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

어떤 경우에 키워드가 있지만 기호가 아닌 것이있을 수 있는가?

+1

Lisp 개발 환경에서는 일반적으로 키보드 조합 메타를 사용할 수 있습니다. 소스 코드로 이동하려면 기호를 누르십시오. 일부 개발 환경은 또한'(ed 'some-function-name)'을 지원하여 각각의 소스 코드로 편집기 창을 엽니 다. –

답변

2

keyword은 물론 항상 symbol입니다.

문제의 기능은

(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)) 

즉, 당신의 코드는이 작업을 수행 defined

과 같습니다 x가합니다 ( KEYWORD 패키지에 구금 symbol는) 다음이와 함께 "일반"기호를 반환 keyword 경우 현재 패키지 *package*에있는 동일한 이름입니다 (그렇지 않으면 x을 반환합니다).