AUTO-IMPORT — #:g1

Posted 2010-06-28 13:33:00 GMT

GITHUB-INSTALL便利だし紹介したい!と思って前回のエントリーを書いたのですが、前々回に既に紹介してましたw
あんまりなので、同じく昨日位に作ってみたAUTO-IMPORTを紹介してみます。
TAO/SILENTの論文を読んでパッケージ・パスというアイデアが便利そうだったので、中途半端に真似てみました。
もっと本格的に真似られれば結構便利な気がしますが、下記のコードくらいでも普段の作業では割と便利です。

(DEFPARAMETER *PACKAGE-PATH* 
  (LIST :SHIBUYA.LISP 
        :FARE-UTILS 
        :ALEXANDRIA
        :MYCL-UTIL
        :KMRCL
        :METATILITIES
        ))

(DEFUN AUTO-IMPORT (NAME &AUX ANS) (DOLIST (PKG (REVERSE *PACKAGE-PATH*)) (WHEN (AND (FIND-PACKAGE PKG) (FIND-SYMBOL (STRING NAME) PKG)) (LET ((SYM (INTERN (STRING NAME) PKG))) (SHADOWING-IMPORT SYM) (PUSH PKG ANS)))) ANS)

;; FLATTENが欲しい
(AUTO-IMPORT :FLATTEN)
;⇒ (:SHIBUYA.LISP :ALEXANDRIA :MYCL-UTIL :KMRCL)

(FLATTEN '(1 2 3 4 5 (1 2 (3 (4 ((((5)6)))))))) ;⇒ (1 2 3 4 5 1 2 3 4 5 6)

(SYMBOL-PACKAGE 'FLATTEN) ;⇒ #<PACKAGE "SHIBUYA.LISP">


comments powered by Disqus