Shammer's Philosophy

My private adversaria

Lisp でディレクトリを作成する

手順としては以下。

  1. make-pathname で PATH を作成
  2. ensure-directories-exist

まずは、絶対PATHを使用した例。$HOME に xxx というディレクトリを作成する例。

(setf x (make-pathname :directory '(:absolute "Users" "me" "xxx")))
(ensure-directories-exist x)

相対 PATH を使用した例。

(setf x (make-pathname :directory '(:relative "xxx")))
(ensure-directories-exist x)

これは、Current Directory に xxx というディレクトリを作成する。

なお、上記例では :directory の引数をシングルクォートで渡しているが、変数を使用する場合はこの方法だとエラーになる。以下はエラーの例。

(setf x "x")
(make-pathname :directory '(:absolute "Users" "me" x)

*** - MAKE-PATHNAME: Illegal :DIRECTORY argument (:ABSOLUTE "Users" "me" X)

作成するディレクトリ名が決め打ちじゃない場合は、list で渡してやる必要がある。

(setf x "x")
(make-pathname :directory (list :absolute "Users" "me" x))
#P"/Users/me/x/"

変数で渡す場合は、変数にスラッシュが含まれていても Illegal :DIRECTORY argument になるので注意が必要。