2011-11-08 3 views
5

커먼 리스프 패키지 정의 CL의 패키지 정의에서

(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)을 가져 오는 데 사용되는 경우에는 기호가없는 기호를 사용하는 것이 좋습니다. 여기

은 다른 옵션입니다

  • 키워드 기호를 사용; 나는이 interns 키워드 기호가 apropos와 다른 장소에 나타나는 방법을 좋아하지 않는다.
  • 문자열을 사용한다; 나는 이것이 알레그로의 "모던"모드를 이상없이 부수는 방식을 좋아하지 않는다.
  • 은 일반 기호를 사용한다; 나는 기호 방법이 모두 인턴을 좋아하지 않는 당신이 다른 사람이 사용하는 또는 사람이 취향의 문제입니다 스타일 잠재적으로 임의 패키지

에서 그것을 인턴 방법에 대해 설명합니다.

+0

감사합니다. 대답. 이 링크는 http://stackoverflow.com/questions/7894548/why-are-uninterned-symbols-used-for-package-names-and-exports-in을 보여주기 때문에 이름없는 공간에서 충돌을 피하기 위해 uninterned symbols을 채택 할 것입니다. -common-lisp. 나는 더 나은 접근법이라고 생각한다. – csgui