ディレクトリのリスト表現からパスを生成する


Tag: 入出力

make-pathname は:directory引数等で、リスト表現も受け付けますので工夫すれば簡単に書くことが可能です

(defun gen-dirs (dirs subdirs)
  (mapcan (lambda (d)
            (mapcar (lambda (b)
                      (make-pathname :directory `(:absolute ,@(mapcar #'string d) ,(string b))
                                     :case :common))
                    subdirs))
          dirs))
(gen-dirs '((usr local) (usr2 local) (usr) () )
          '(bin sbin))
;=>  (#P"/usr/local/bin/" #P"/usr/local/sbin/" #P"/usr2/local/bin/"
;     #P"/usr2/local/sbin/" #P"/usr/bin/" #P"/usr/sbin/" #P"/bin/" #P"/sbin/")