[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

reduce should allow an accessor function to be specified



    Date: Saturday, 14 November 1987  04:38-EST
    From: Mark Bromley <bromley at Think.COM>

    [request for :KEY argument to REDUCE]

    Summing the cars of a sequence of conses is cumbersome using
    reduce:

    (reduce #'(lambda (a b)
		(+ (if (consp a) (car a) a)
		   (if (consp b) (car b) b))) sequence)

Could you clean this up by using:

(reduce #'(lambda (total cons) (+ total (car cons)))
	sequence
	:initial-value 0)

???

It's still not pretty, but it's a bit closer to 'nice'.  It treats
empty sequences differently, though.  My version returns 0 (the
:INITIAL-VALUE argument), while the other signals an error (the LAMBDA is
called with 0 arguments).

    It would be much more natural to be able to use the following

    (reduce #'+ sequence :key #'car).

I agree.  :KEY is a much more elegant way to solve the problem.

-- Stephen