パッケージ内のシンボルを全表示する
たとえば簡単なmyapp2プロジェクトに含まれる関数をすべて表示させたいとき、do-all-symbols
を使う。しかし簡単にはいかない。(do-all-symbols :myapp2)
などとやってもエラーとなり、期待した出力は出ない。
myapp2内のパッケージ内すなわちmyapp2/src/myapp2.lisp
には、次の関数fib
があるとする。
(defun fib (n) (cond ((= n 0) 0) ((= n 1) 1) (t (+ (fib (- n 1)) (fib (- n 2))))))
quicklispがmyapp2パッケージを認識可能な状況で(例えば「ln -s ~/work/sbcl/myapp2 ~/.roswell/local-projects
」を実行して、プロジェクトディレクトリのシンボリックリンクを~/.roswell/local-projects
に置く)、次のような一連のプログラムをREPLで入力してみる。
(ql:quickload :myapp2) (let ((lst ())) (do-all-symbols (s lst) (when (eq (find-package 'myapp2) (symbol-package s)) (push s lst))) lst) ;; (MYAPP2:FIB MYAPP2::N) ;; ←結果
これだとfib
内の引数n
まで表示されてしまうがしかたないか。
この関数をいちいち手入力で作成するのは面倒なので、どこかに格納しておきたい。