Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-02-14

KMRCLを眺める (87) DIRECTORY-TREE

| 21:04 | KMRCLを眺める (87) DIRECTORY-TREE - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める (87) DIRECTORY-TREE - わだばLisperになる

今回はKMRCLのio.lisp中からDIRECTORY-TREEです。

io.lispを眺めるのも今回で終り。今回のDIRECTORY-TREEの内部で、PROBE-DIRECTORY等が使われていたためimpl.lispに回り道していました。

動作は名前そのままの感じで、ディレクトリ構造をツリーで返してくれるというものです。再帰的にディレクトリを辿って行きますが、通常のファイルは返されるツリーには含まれません。

(DIRECTORY-TREE "/opt")
⇒ 
(#P"/opt/"
   (#P"/opt/google/"
      (#P"/opt/google/chrome/"
         (#P"/opt/google/chrome/locales/")
         (#P"/opt/google/chrome/resources/"
            (#P"/opt/google/chrome/resources/inspector/"
               (#P"/opt/google/chrome/resources/inspector/Images/")))))
   (#P"/opt/scl/"
      (#P"/opt/scl/bin/")
      (#P"/opt/scl/lib/")))

定義は、

(defun directory-tree (filename)
  "Returns a tree of pathnames for sub-directories of a directory"
  (let* ((root (canonicalize-directory-name filename))
         (subdirs (loop for path in (directory
                                     (make-pathname :name :wild
                                                    :type :wild
                                                    :defaults root))
                        when (probe-directory path)
                        collect (canonicalize-directory-name path))))
    (when (find nil subdirs)
      (error "~A" subdirs))
    (when (null root)
      (error "~A" root))
    (if subdirs
        (cons root (mapcar #'directory-tree subdirs))
        (if (probe-directory root)
            (list root)
            (error "root not directory ~A" root)))))

という風。

さて次回からどのファイルを眺めようかなと。