ディレクトリとパス名の扱い

システム構築時に面倒くさいのがワーキングディレクトリの扱い.定義しておかないと,先の例でみたように,ファイル名を読み込むとき,(load “C:/Users/Nishida/Documents/gcl/sample1.lsp”)とディレクトリ+ファイル名を完全に打ち込まなければならない.これは,繰り返すと手間もかかるし,プログラムのポータビリティも悪い.どこかに,”C:/Users/Nishida/Documents/gcl/”くらいまでを覚えておかせて,sample1.lspを読み込むときには,(load “sample1.lsp”)くらいで済ませたい.
ソリューション
Common Lispは(load ファイル名)を実行するとき,ファイル名の前に,*default-pathname-defaults*の値をくっつけて完全ファイル名にしてからロードする.*default-pathname-defaults*の初期値は,#p”” (すなわち,空のディレクトリ)になっている.そこで,次のようにすればよい.
(setq *default-pathname-defaults* (pathname “C:/Users/Nishida/Documents/gcl/”))
=> #p”C:/Users/Nishida/Documents/gcl/”
このあとで,(load “sample1.lsp”)を実行すると,C:/Users/Nishida/Documents/gcl/というディレクトリの下の,sample1.lspが読み込まれ,実行される.
上において,pathnameは文字列からディレクトリ型のオブジェクトを作る.
論理的なディレクトリ表現をapthnameに変えたければ,(truename 文字列)を使う.例えば,
(truename “.”)
=>  #p”C:/Windows/system32″
(truename “../../Users/Nishida”)
=> #p”C:/Users/Nishida”