2008年12月7日日曜日

あったら便利だと思う

パス名も setf で変更できたらいいのに

(setf (pathname-type "/home/kosh/foo.l") "lsp")
;=> "/home/kosh/foo.lsp"

パッと思いついたもの。 これだと置換する文字数同じでないとダメだし、ファイル名とディレクトリ名が被ると面倒だなあ。やはり make-pathname だろうか

(and (setf (subseq #1="C:/home/xyzzy/xyzzy.exe"
                   (search (pathname-type #1#) #1#))
           "mp3")
     #1#)
;=> "C:/home/xyzzy/xyzzy.mp3"

[追記] 2008-12-13T20:16:43+09:00

初めから make-pathname 使おうと思わないのはまだCL脳でない証拠か

(make-pathname :defaults "C:/home/xyzzy/xyzzy.exe"
               :type "mp3")
;=> #P"C:\\home\\xyzzy\\xyzzy.mp3"

パスネームの構造をよく知らないんだが、リストもしくは構造体で表現されているならば setf が使えてもいい気がするのになあ こんな感じに

((:device "C")
 (:host nil)
 (:directory ("home" "xyzzy"))
 (:name "xyzzy")
 (:type "exe")
 (:version nil))

ま、あくまでも仮定の話だしね

0 件のコメント:

コメントを投稿