On Sat, 2009-07-04 at 16:23 -0700, Derick Eddington wrote:
> On Sun, 2009-07-05 at 02:09 +0300, Abdulaziz Ghuloum wrote:
> > On Jul 5, 2009, at 1:55 AM, Derick Eddington wrote:
> > 
> > > E.g.:
> > >   (define/kw (f (a :default 1) . r) (list a r))
> > >   (define (make-kw) (:- a))
> > >   (f (make-kw) 2)
> > >   => (1 (#[keyword a] 2))
> > >   ((values f) (make-kw) 2)
> > >   => (2 ())
> > > is inconsistent and doesn't seem acceptable.
> > 
> > 
> > And to make them consistent, you're going to choose which one
> > to be the "right" one and which one to be the "bad"?
> 
> If run-time processing (lambda/kw and first-class ability) is going to
> exist, it seems like it should be considered the "right" one because it
> unavoidably has to recognize values, and it's not possible to enforce a
> prohibition against giving keywords which are not created using (:- ---)
> at the immediate call-site, and I like the philosophy of "do not
> prohibit what you cannot enforce".

Also, being able to give keywords created elsewhere seems like a good
possibility to allow because it allows abstraction, manipulation, and
composition of keywords arguments.  It's sort of related to the flaw
with using symbols as keywords, but if someone passes a first-class
keyword which has a distinct keyword type, I think it makes sense to
have that mean they want it interpreted as a keyword.

If lambda/kw / first-class keywords-procedures are dropped, this is no
longer an issue, and I could also keep using quote as the tag.  But I
don't think I'm OK with losing first-class.

-- 
: Derick
----------------------------------------------------------------

Reply via email to