From dbd9978f6388f775c57a2b03124401b7f15fd9e1 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 15 Jan 2008 13:09:40 +0000 Subject: [PATCH] start mzc scribbling svn: r8334 original commit: 8b16cee613d8ea3258c98e2e4c98b3756ae04019 --- collects/scheme/mpair.ss | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/collects/scheme/mpair.ss b/collects/scheme/mpair.ss index 01c0d41..2051d7c 100644 --- a/collects/scheme/mpair.ss +++ b/collects/scheme/mpair.ss @@ -8,6 +8,7 @@ mappend mappend! mreverse + mreverse! mlist-tail mlist-ref mmemq @@ -103,10 +104,11 @@ (case-lambda [() null] [(a) a] - [(a b) (let loop ([atail a]) - (cond [(null? atail) b] - [(null? (mcdr atail)) (set-mcdr! atail b) a] - [else (loop (mcdr atail))]))] + [(a b) (if (null? a) + b + (let loop ([atail a]) + (cond [(null? (mcdr atail)) (set-mcdr! atail b) a] + [else (loop (mcdr atail))])))] [(a . l) (mappend! a (apply mappend! l))])) (define (mreverse l) @@ -115,6 +117,14 @@ [(null? l) a] [else (loop (mcdr l) (mcons (mcar l) a))]))) +(define (mreverse! l) + (let loop ([l l][prev null]) + (cond + [(null? l) prev] + [else (let ([next (mcdr l)]) + (set-mcdr! l prev) + (loop next l))]))) + (define (mlist-tail l n) (cond [(zero? n) l]