Shammer's Philosophy

My private adversaria

自作concatを他パッケージで使おうとするとエラー

自作 concat - Ver20130205 - Shammerismで作成したconcatを定義したファイルを、.ccl-init.lispからloadしているが、別パッケージでこのconcatを使用するとエラーになることが判明。

? (defpackage "P1" (:use "COMMON-LISP" "CCL" "COMMON-LISP-USER"))
#<Package "P1">
? (in-package "P1")
#<Package "P1">
? (concat "a" "b" "c")
> Error: Undefined function CONCAT called with arguments ("a" "b" "c") .
> While executing: CCL::TOPLEVEL-EVAL, in process listener(1).
> Type :GO to continue, :POP to abort, :R for a list of available restarts.
> If continued: Retry applying CONCAT to ("a" "b" "c").
> Type :? for other options.
1 >

デフォルトパッケージで定義しているからどのパッケージからも使用できる、と思っていたが、そういうことはなくデフォルトパッケージで定義していてもexportしなければ他のパッケージでは使用できないらしい。もちろん、common-lisp-user::concatとすれば使用できるが、こう書くのは面倒だ。こうやらなくても良いようにデフォルトパッケージにしているのに、これをしていたら意味がない。仕方ないので、自分で定義したそれぞれの関数をexportすることにした。