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

Things to consider for CLtL'97

    Date: Fri, 28 Feb 86 17:06 EST
    From: David C. Plummer <DCP@SCRC-QUABBIN.ARPA>

	Date: Fri, 28 Feb 86 15:04 EST
	From: Guy Steele <gls@THINK-AQUINAS.ARPA>

	    Date: Tue, 25 Feb 86 11:15 EST
	    From: David C. Plummer <DCP@SCRC-QUABBIN.ARPA>

	    reduce should have a :KEY keyword argument.  For example, suppose you
	    have a sequence of sequences, and you want to know the sum of the
	    lengths of the inner sequences.  Currently, I think you have to do
		    (reduce #'(lambda (so-far subsequence)
				(+ so-far (length sub-sequence)))
	    but I would prefer to do
		    (reduce #'+ sequence :key #'length)

	(REDUCE #'+ (MAP (TYPE-OF sequence) #'length sequence))

    Yours conses.  Mine doesn't.

Argh.  If you're worried about conses, use LOOP.  Seems like everyone
else does.  (This week I am of the opinion that all those :START and
:END keywords were a mistake.)

	Did you mean:

	    modify-seq item sequence modifier &key start end from-end test test-not
	    modify-seq-if predicate sequence modifier &key start end from-end
	    modify-seq-if-not predicate item sequence modifier &key start end from-end

    I see, I think.  Yes, I want the -IF and -IF-NOT forms as well.

	And should they all also take a :KEY argument?
    I don't think so.  Consider what :KEY does.  It extracts a part of the
    datastructure.  To put it back, the implementation would have to do
    something like
	    (setf (funcall key sequence-element)
		  (funcall modifier
			   (funcall key sequence-element)))
    and SETF of FUNCALL isn't generally invertable.

Sorry; I meant the :KEY part to be used only in conjunction with the
test, not the modify part of the operation.  See how tricky it is to
specify these things?

Seems to me JONL once proposed an omnibus sequence function with a name
such as MEMASSDELREMCONCQ-IF that simply took enough options to be able
to do anything you desired with a sequence.