関数内での関数定義はfletまたはlabels
http://d.hatena.ne.jp/komamitsu/20090627/1246116070 で、関数内での関数定義をさせる際にdefunを使っていたのですが、これだと外部からも参照できてしまうのでした。
letのようにS式の中に関数定義を閉じさせる必要があったのですが、そういう場合はfletかlabelsを使うと良いらしいです。
更に内部でも関数名を使う場合(再帰とか?)はlabelsを使うべきらしい。
[3]> (defun a (x) (labels ((b (x) (print x))) (b x))) A [4]> (a 3) 3 3