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 ----------------------------------------------------------------
