Kenny Tilton <ktilton(a)nyc.rr.com> writes:
> nikodemus(a)random-state.net wrote:
>
> > This is quite off-topic for the thread, but I for one always cringe when I
> > see Cells code due to C? and friends.
> >
> > If the syntax were:
> >
> > RULE-LAMBDA (binding) form*
> >
> > or
> >
> > RULE-LAMBDA binding form*
>
> Garnet's KR had (I forget)-formula. But when one is /really/ using
> Cells, one is spraying CVs and C?s around all the time, and this is more
> a candidate for something like collapsing QUOTE into ' or FUNCTION into
> #' then it is expansion into big-huge-name useful at the application
> level where, as we all know, excessive abbreviation saves so very little
> and detracts so much from readability.
>
> That said, if some contributor wanted to create c-formula and c-variable
> macros and add them to Cells I would not mind.
Okay, how are these for a start?
(defmacro cv (&optional (value +unbound+))
`(cells::make-c-variable :value ,value))
(defmacro c-formula ((&rest keys &key lazy cyclic-p cyclic-value) &body forms)
(declare (ignore lazy cyclic-p cyclic-value))
`(cells::make-c-dependent :code ',forms :rule (c-lambda ,@forms)
,@keys))
(defmacro c-variable ((&rest keys &key cyclic-p) &optional (value nil valuep))
(declare (ignore cyclic-p))
`(cells::make-c-variable :value ,(if valuep value '+unbound+) ,@keys))
They don't capture all the options (yet), but syntactically I think I
like it. I agree that cv and c? are so common they should have their
own short abbreviations. However, c?_8... seems like maybe not the
best road syntactically. This syntax has the advantage of not needing
to export a new macro if more options are added later (not that I can
think of any types of cells still missing, of the top of my head).
Actually, I just changed my code to use c-formula instead of c?_, and
I like it. It even saves me two columns of horizontal space. I have
no desire to change my c? forms, but it's not like my lazy formulas
were one-liners anyway.