Subject: Re: Attribute String... From: "Lassi A. Tuura" <Lassi.Tuura@xxxxxxx> Date: Mon, 06 Oct 1997 10:34:21 +0200 |
I sent an implementation of `map', which was wrong, and James Clark responds: > That implementation is not correct. > > (map + '(1 2 3) '(4 5 6)) > > should return > > (5 7 9) > > not > > (1 2 3 4 5 6) Ouch. Maybe I should spend more time reading the specs and less time guessing what the interface should be. Here is another candidate that avoids computing the full `transpose' of the argument lists. Any idea whether it is better or worse in terms of memory usage if `map' is used heavily? (define (list-heads lists) (if (null? lists) '() (if (list? (car lists)) (cons (caar lists) (list-heads (cdr lists))) (list (car lists))))) (define (list-tails lists) (if (null? lists) '() (if (list? (car lists)) (if (null? (cdar lists)) (list-tails (cdr lists)) (cons (cdar lists) (list-tails (cdr lists)))) (cdr lists)))) (define (map proc #!rest lists) (if (null? lists) '() (let loop ((args (list-heads lists)) (rest (list-tails lists)) (result '())) (if (null? rest) (reverse (cons (apply proc args) result)) (loop (list-heads rest) (list-tails rest) (cons (apply proc args) result)))))) //lat -- Lassi.Tuura@xxxxxxx There's no sunrise without a night DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: Attribute String..., James Clark | Thread | Re: Attribute String..., Dave Love |
Re: Attribute String..., Norman Walsh | Date | DSSSL Training Course in November 1, G. Ken Holman |
Month |