#:g1: KMRCLを眺める(168) CONCAT-SYMBOL-PKG

Posted 2010-06-25 12:54:00 GMT

今回は、KMRCLのsymbols.lispからCONCAT-SYMBOL-PKGです。
定義は、

(defun concat-symbol-pkg (pkg &rest args)
  (declare (dynamic-extent args))
  (flet ((stringify (arg)
           (etypecase arg
             (string
              (string-upcase arg))
             (symbol
              (symbol-name arg)))))
    (let ((str (apply #'concatenate 'string (mapcar #'stringify args))))
      (nth-value 0 (intern (string-default-case str)
                           (if pkg pkg *package*))))))
となっていて、定義と名前からするに、文字列指示子を受け取って文字列が合成されたシンボルを作成するもののようです。
パッケージを指定する機能もあります。
(KL:CONCAT-SYMBOL-PKG NIL "foo" "bar")
;⇒ FOOBAR

(KL:CONCAT-SYMBOL-PKG :KEYWORD "foo" "bar") ;⇒ :FOOBAR

(KL:CONCAT-SYMBOL-PKG :KL "foo" "bar") ;⇒ KMRCL::FOOBAR

pkgにNILを指定するとカレントパッケージが利用されます。

comments powered by Disqus