パス名も 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 件のコメント:
コメントを投稿