Shammer's Philosophy

My private adversaria

load したファイルで in-package しているとどうなる?

例えば、以下のようなファイル(lib1.lisp)を load すると想定。

(defpackage "MYLIB1")

(in-package mylib1)

(export 'hello)

(defun hello ()
  (format t "Hello! This is mylib1:hello.~%"))

単純にロードすると、以下のようになる。

? (load "lib1.lisp")
#P"/Users/shimpei/Dropbox/Tools/LispTools/Package/lib1.lisp"
? (package-name *package*)
"COMMON-LISP-USER"
?

なるほど。ロードが終了したらもともとの package に戻ってくれるようだ。
ロード前に package を定義していた場合はどうなるのだろうか。同じになると思うが。。。

? (defpackage "TEST")
#<Package "TEST">
? (in-package test)
#<Package "TEST">
? (package-name *package*)
"TEST"
? (load "lib1.lisp")
#P"/Users/shimpei/Dropbox/Tools/LispTools/Package/lib1.lisp"
? (package-name *package*)
"TEST"
? (mylib1:hello)
Hello! This is mylib1:hello.
NIL
?

load を呼び出す側の package は変化なし。そして、load 内で定義された package 情報も問題なく残ることがわかった。