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