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

DOTIMES or REPEAT, and old-style DO flushable?

cc: EJS at MIT-MC, JONL at MIT-MC, H at MIT-MC, KMP at MIT-MC,

    From: Eric J. Swenson <EJS at MIT-MC>
    I've long thought that the time had come to flush the old-style DO.  I
    don't think it presents a substantial saving of coding space, and being as
    un-general as it it, is not worth keeping.

    From: Alan Bawden <ALAN at MIT-MC>
    There is a saying about such ideas: "you're in charge!".

I observe that the lexical distance between an old- and new-style
DO is precisely six characters: "(())()":
	(DO x y z w . body) ==> (DO ((x y z)) (w) . body)
But much as I would also like to flush it, I must agree with ALAN.

Bletcherous idea:  let  (DO (NAME) ...) be the way to name a DO?

By the way, guys, I want to push again for the additional interpretation
	(DO (((var11 init11 step11) (var12 init12 step12) ...)
	     ((var21 init21 step21) ...)
	     ((varn1 ...) ...))
	    (test ... retval)
	    . body)

where variables within each group are processed in parallel, but the groups
are processed serially.  Moreover, in the first group omitting a stepper
means don't step (as now), but in other groups means the stepper form
is the same as the init form.  This allows one to do, for example:
	(DO (((X L (CDR X)))
	     ((Y (CAR X)) (Z (CAAR X) (CDAR X))))
	    ((OR (NULL X) (EQ Z 'LOSE)) (BARF))
I.e. Y is always the CAR of X, and Z is a function of X also.
This is not the same as a LET in the body, as these computations
get done before the endtest is evaluated each time.