From b27143a96c70f3398b4cadc2126ea15e42863bec Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Thu, 26 Sep 2013 16:09:39 +0900 Subject: [PATCH] Fixing list-copy for improper lists. --- lib/scheme/extras.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/scheme/extras.scm b/lib/scheme/extras.scm index 93e6c3c5..05717b4b 100644 --- a/lib/scheme/extras.scm +++ b/lib/scheme/extras.scm @@ -150,7 +150,10 @@ (if (>= i n) res (lp (+ i 1) (cons init res)))))) (define (list-copy ls) - (reverse (reverse ls))) + (let lp ((ls ls) (res '())) + (if (pair? ls) + (lp (cdr ls) (cons (car ls) res)) + (append (reverse res) ls)))) (define (list-set! ls k x) (cond ((null? ls) (error "invalid list index"))