aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Wagner <shawnw.mobile@gmail.com>2023-02-11 03:33:20 -0800
committerShawn Wagner <shawnw.mobile@gmail.com>2023-02-11 03:33:20 -0800
commit4b7306cb22dacc86ef4c4ac216648a4e11a993b1 (patch)
treed2c022abbc80b26fb3772eb00930bfd2500cba22
parent4a2d626b8cd07a735a954f21ba1ee8a18eb4c30d (diff)
downloadperlweeklychallenge-club-4b7306cb22dacc86ef4c4ac216648a4e11a993b1.tar.gz
perlweeklychallenge-club-4b7306cb22dacc86ef4c4ac216648a4e11a993b1.tar.bz2
perlweeklychallenge-club-4b7306cb22dacc86ef4c4ac216648a4e11a993b1.zip
Challenge 203.2: Solution in Racket
-rw-r--r--challenge-203/shawn-wagner/racket/ch-2.rkt19
1 files changed, 19 insertions, 0 deletions
diff --git a/challenge-203/shawn-wagner/racket/ch-2.rkt b/challenge-203/shawn-wagner/racket/ch-2.rkt
new file mode 100644
index 0000000000..23f245fde7
--- /dev/null
+++ b/challenge-203/shawn-wagner/racket/ch-2.rkt
@@ -0,0 +1,19 @@
+#lang racket/base
+
+(require racket/file racket/list)
+
+(define (copy-directory-tree source target)
+ (let* ([source (string->path source)]
+ [target (string->path target)]
+ [source-component-length (length (explode-path source))]
+ [targets
+ (fold-files
+ (lambda (path type paths)
+ (if (eq? type 'dir)
+ (cons (apply build-path target (drop (explode-path path) source-component-length)) paths)
+ paths))
+ '()
+ source)])
+ (for-each make-directory* targets)))
+
+(copy-directory-tree "a/b/c" "x/y")