;;; ;;; Time-stamp: <06/02/05 20:40:10 noel> ;;; ;;; Copyright (C) 2005 by Noel Welsh. ;;; ;;; This library is free software; you can redistribute it ;;; and/or modify it under the terms of the GNU Lesser ;;; General Public License as published by the Free Software ;;; Foundation; either version 2.1 of the License, or (at ;;; your option) any later version. ;;; This library is distributed in the hope that it will be ;;; useful, but WITHOUT ANY WARRANTY; without even the ;;; implied warranty of MERCHANTABILITY or FITNESS FOR A ;;; PARTICULAR PURPOSE. See the GNU Lesser General Public ;;; License for more details. ;;; You should have received a copy of the GNU Lesser ;;; General Public License along with this library; if not, ;;; write to the Free Software Foundation, Inc., 59 Temple ;;; Place, Suite 330, Boston, MA 02111-1307 USA ;;; Author: Noel Welsh <[email protected]> ;; ;; ;; Commentary: (module file mzscheme (require (lib "plt-match.ss") (lib "file.ss")) (provide make-directory-tree) ;; make-directory-tree : (tree-of string) -> void (define (make-directory-tree tree) (define (tree-fold seed tree) (define (list->path head rest) (apply build-path (reverse (cons head rest)))) (match tree [(? string? here) (make-directory* (list->path here seed))] [(list) (void)] [`(,(? string? head) (,children ...) . ,rest) (make-directory* (list->path head seed)) (tree-fold (cons head seed) children) (tree-fold seed rest)] [`(,(? string? here) . ,rest) (make-directory* (list->path here seed)) (tree-fold seed rest)])) (tree-fold null tree)) )