diff options
-rw-r--r-- | share/txr/stdlib/build.tl | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/share/txr/stdlib/build.tl b/share/txr/stdlib/build.tl index 32df083d..a5960578 100644 --- a/share/txr/stdlib/build.tl +++ b/share/txr/stdlib/build.tl @@ -51,22 +51,25 @@ (while lists (usr:rplacd tl (copy (cdr tl))) (set tl (last tl)) - (usr:rplacd tl (car lists)) + (let ((nx (car lists))) + (usr:rplacd tl (if (tailp tl nx) + (copy nx) + nx))) (set lists (cdr lists))) (set self.tail tl)) nil) (:method pend* (self . lists) - (let* ((h self.head) + (let* ((h (cdr self.head)) (nh (cons nil nil)) (tl nh)) (while lists - (usr:rplacd tl (copy tl)) + (usr:rplacd tl (copy (cdr tl))) (set tl (last tl)) (usr:rplacd tl (car lists)) (set lists (cdr lists))) (set tl (last tl)) - (usr:rplacd tl (cdr h)) + (usr:rplacd tl (if (tailp tl h) (copy h) h)) (set self.head nh)) nil) |