Shammer's Philosophy

My private adversaria

ccl::get-user-home-dirの方がいい場合

Lispディレクトリを操作する場合、Lisp functions to handle directries - ShammerismとかでやったようにPathnameを使用するのが基本。しかし、Pathnameだとファイルを指定するときにタイプを指定してやらないといけなかったり、文字列で指定してしまえば楽なのにと思うことがある。幸い、with-open-fileはPathnameじゃなくてもファイルを開くことができるので、

(merge-pathnames
    (make-pathname :directory
                   (list :relative
                         "Dir1"
                         "Dir2"
                         "Dir3"))
    (user-homedir-pathname))

というのは

(concatenate 'sting (ccl::get-user-home-dir (ccl::getuid)) "/Dir1" "/Dir2" "Dir3"))

で置き換えることができる。
もっとも、Lispの処理系を変えてしまうとccl::get-user-home-dirもccl::getuidもない。類似のものがあるかは処理系ごとに確認しないといけない。make-pathnameだと、一部のディレクトリ名だけ"Dir1/Dir2/"というようにわかっている場合に、これを"Dir1"と"Dir2"に分けてやらないといけなくて面倒。何かいい関数あるのだろうか。Pathnameに関連する関数には以下の関数があるようだ。

  • pathname
  • pathname-device
  • namestring
  • truename
  • pathname-directory
  • file-namestring
  • parse-namestring
  • pathname-name
  • directory-namestring
  • merge-pathnames
  • pathname-type
  • host-namestring
  • pathname-host
  • pathname-version
  • enough-namestring

stringという文字を含むやつに期待だ。