From a68ffccdccc9023c1beb14cae2a8d2695e517da0 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Fri, 16 Dec 2022 00:09:39 +0100 Subject: add dup --- mew.scm | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'mew.scm') diff --git a/mew.scm b/mew.scm index 259f51c..8635195 100644 --- a/mew.scm +++ b/mew.scm @@ -3,7 +3,7 @@ act accumulate andloc app at boolean comp cross-product - dec def del-at div + dec def del-at div dup empty? eof esc fail fin final for fun* gconcatenate gen generator-xfold generic-for-each genumerate get @@ -395,6 +395,22 @@ ((procedure? o) (generator-count (op #t) o)) (#t (error "no len defined")))) + (define dup + (case-lambda + ((o) (dup o #t)) + ((o depth) + (if (or (eq? depth #t) (positive? depth)) + (let ((sub-depth (or (eq? depth #t) (- depth 1)))) + (cond ((list? o) (map (lambda (oo) (dup oo sub-depth)) o)) + ((vector? o) (vector-map (lambda (oo) (dup oo sub-depth)) o)) + ((hash-table? o) + (alist->hash-table (dup (hash-table->alist o) sub-depth) + (hash-table-equivalence-function o) + (hash-table-hash-function o))) + ((string? o) (string-copy o)) + (else o))) + o)))) + (define (generic-for-each obj) (cond ((list? obj) for-each) ((vector? obj) vector-for-each) -- cgit 1.4.1