Keyword arguments:  Although I'm comfortable in the #: camp, I can
understand people preferring :foo over #:foo for the reason that it is
faster to type. #: requires two shifted chars. If you touch type you
use both left and right shift keys O_o. In that respect #: is even
more awkward a finger dance than #%. :)  Although it doesn't bother me
that much, and I don't think it should change, I do understand.
However...

Symbol(ish) values:  I don't understand preferring :foo over 'foo.
It's more typing not less. And more basically, just why? I don't
understand having two symbol-ish value flavors.  People new to lisp
already have trouble understanding the how and why of symbols.^1
Having two flavors of this seems like a distinction without a
difference; what am I overlooking?

^1: Example: 
http://stackoverflow.com/questions/8846628/what-exactly-is-a-symbol-in-lisp-scheme


On Fri, Oct 23, 2015 at 10:00 AM, John Berry <jarc...@gmail.com> wrote:
> Yes, speaking personally, if I think about what I mean when I think about
> :keyword over #:keyword, what I really am after is the difference Alexis
> describes: of keywords as values vs. keywords as syntax.
>
>
> And looked at that way, it really just seems to be a question of different
> idioms, that of older Lisp/Scheme style vs. the Clojure style I got
> accustomed to on my day job.
>
>
> On Thu, Oct 22, 2015 at 11:00 PM, Alexis King <lexi.lam...@gmail.com> wrote:
>>
>> > And I'm surprised how many people claim to love #:keyword.  (The
>> > engineering opposition to any non-backward-compatible change was entirely
>> > predictable, but I assumed only a small percentage would actually prefer
>> > #:keyword, due to familiarity or different aesthetic wiring, and that 
>> > around
>> > half the people would be indifferent to the change.)
>>
>> I was going to refrain from saying anything more on this subject (I didn’t
>> respond to the survey at all), but this point interested me. I realized that
>> I’ve grown fond of #:keyword, and I didn’t have any idea why. There have
>> been many times that I’ve found it clunky, or that I’ve missed Clojure or
>> Ruby’s :keywords.
>>
>> That’s when I realized: Racket doesn’t use its keywords like those
>> languages do. Clojure uses them constantly—it uses them wherever Racket
>> would usually use symbols—and Rails has elevated Ruby’s symbols above
>> literal strings in pure frequency (for better or for worse).
>>
>> In Ruby, I can do `x = :kw`. In Clojure, I can do (def x :kw). In Racket,
>> I have to do (define x '#:kw), and that is really awful. I need not one but
>> three(!) symbols in front of my raw identifier, and the level of syntactic
>> noise is pretty atrocious. As a side effect of both this and the traditional
>> use of symbols in scheme for this purpose, Racket pretty much only uses
>> keywords for one thing: keyword arguments.
>>
>> In Racket, a bare #:keyword used as an expression is not just useless, it
>> is a syntax error. A Racket programmer is trained to see keywords in
>> function application alone, so (foo #:kw bar) looks fine, but (foo #:kw)
>> looks weird. They always need to be paired with a value. With keywords so
>> integrally associated with function application syntax, I’ve grown to think
>> of keywords as syntax, never as runtime values, and the hash prefix
>> reinforces this. Heck, even syntax/parse’s :expr syntax class rules out
>> keywords! They are little syntactic tags, nothing more.
>>
>> For me, this is actually fine. I don’t really mind the verbosity, though
>> making keyword arguments prettier would be nice to have. However, if you are
>> arguing for using keywords as runtime values, that’s an entirely different
>> story... though it does raise the question of how they should be
>> special-cased in function application for keyword arguments (both Ruby and
>> Clojure effectively transform keyword arguments into a single hash argument,
>> rather than making “keyword procedures” that have some special magic).
>>
>> Basically: keywords are very different in Racket. I don’t know much CL, so
>> I can’t speak to that, but I think there’s more going on here than syntax.
>> If that’s the case, omitting a hash would only solve a portion of the
>> problem... and Racket programmers might not view their keywords in the same
>> light as those from other languages. I certainly didn’t.
>>
>> Sorry for the rambling... but maybe some food for thought.
>>
>> Alexis
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to racket-users+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to racket-users+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to