defpackage マクロを呼び出した時点でシンボルをまだ作成していない場合、パッケージからシンボルをどのようにエクスポートしますか?
(defpackage :package-a
(:use :cl)
(:export :fruit-type :animal-type :orange :apple :peach :cat :dog))
(deftype fruit-type () '(member ORANGE APPLE PEACH))
(deftype animal-type () '(member CAT DOG))
(defparameter *other-symbol-names*
'("A1" "A2" "B1" "B2")) ;imagine a longer list here
;with names generated by a function
(defparameter *other-symbols*
(mapcar #'(lambda (sym-name)
(import (make-symbol sym-name))
(find-symbol sym-name))
*other-symbol-names*))
(mapcar #'export *other-symbols*)
(setf A1 32 A2 33 B1 34 B2 35)
また、別のパッケージがあります
(defpackage :package-b
(:use :cl :package-a))
(in-package :package-b)
(format nil "~a ~a ~a ~a" |A1| |A2| |B1| |B2|)
私は「The Complete Idiot's Guide to Common Lisp Packages」を読んだことがあります。 IMPORT、EXPORT、SHADOW などの機能のすべては、DEFPACKAGE と呼ばれる単一のマクロにまとめられています。これは、実際の (非プロトタイプ) コードに使用する必要があります。"
上記のコードにコードの匂いはありますか? また、重複を避けるために、他のシンボル (猫、犬、動物の種類など - それらの多くがあります) をどのようにエクスポートしますか?