#:g1: com.informatimago.tools.pathnameの紹介

Posted 2014-12-25 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の360日目です。

com.informatimago.tools.pathnameとはなにか

 com.informatimago.tools.pathnameは、Pascal Bourguignon氏作のパスネームを扱うライブラリです。

パッケージ情報

パッケージ名com.informatimago.tools.pathname
Quicklisp

インストール方法

(ql:quickload :com.informatimago.tools.pathname)

試してみる

 エクスポートされているのは、make-pathname、translate-logical-pathname、user-homedir-pathnameの3つですが、どれもclパッケージに定義されているものです。
何が目的なのかソースを眺めてみましたが、user-homedir-pathnameは、Windows上のCCLだとホームディレクトリを返さないという問題があるらしくそれの対処のようです。
他、make-pathnameですが、*case-common-is-not-downcased-on-posix-systems*というフラグで処理系ごとに挙動を変えています。
case-commonというのは恐らく

(make-pathname :directory "DI" :name "TILTOWAITO" :type "MOLITO"
               :case :common)
;=>  #P"/di/tiltowaito.molito"

この:case :commonだと思うのですが、Allegro CLと、Emacs CLは、POSIXシステムだと小文字になるべき所でならないようなことが読み取れます。
そうなのかと思ってAllegro CLのalisp/mlisp両方で試してみましたが、そんなこともないようです。

 ちなみにこの:case :commonですが、大文字で書くと、ファイルシステムのデフォルトのケース(Unixなら小文字)に合せてくれて、小文字ならその逆、混ぜると変換なし、というものです。
:common :caseを付けるのが正しい的な説も耳にしたことがありますが、デフォルトは:common :localだったりもしますし、ちょっと謎です。

 translate-logical-pathnameの方も謎がありますが、パスをlogical-pathnameに変換しているようなので、変換するほうが都合が良い処理系があったりするのかもしれません。

まとめ

 今回は、com.informatimago.tools.pathnameを紹介してみました。
若干謎が多いユーティリティですが、コードを眺めていて、logical-pathnameは、pathnameとは別の型が用意されていることに気付きました。
これは知らなかった…。

(type-of #p"sys:src;")
;=>  LOGICAL-PATHNAME

(type-of #p"/") ;=> PATHNAME

comments powered by Disqus