Eli Barzilay wrote:
On Mar 27, Ryan Culpepper wrote:
Eli Barzilay wrote:
Here's a suggestion for a small addition to `scheme/base', with the
obvious meaning:
(with-hash <hash> <key> <expr>)
Lookup <key> in <hash> and return the found value. If there is
no value evaluate <expr>, store it in <hash> for the <key>, and
return it.
[...]
Any objections?
I don't like the name.
That's the best I could think of -- and the good point in it is that
it's a strong hint that it's a macro.
It shouldn't be a macro. A macro that is really really almost just a
procedure is a dinky kind of macro.
I think you should make it a procedure (use the normal hash
value/thunk convention) and name it 'hash-ref/default!' or something
similarly descriptive.
That's actually a point that I forgot to mention. At some point,
Matthew made `hash-ref' accept a plain value for a default rather than
a thunk. The reason is that
(or (hash-ref t k #f) ...stuff..)
is faster than putting stuff in a thunk. This is especially important
with hash tables, when you're trying to speed things up.
The docs say 'hash-ref' accepts a third value, which if a procedure is
applied to get the default value and which otherwise is interpreted as
the default value. That's what I meant by "the normal hash value/thunk
convention".
Also, how about making it generic instead and adding it to
scheme/dict? I'd rather procedures for common usage patterns of
dictionaries were put in scheme/dict than added to the base
language.
That would of course be useful as a dict method too -- but there's no
contradiction in having both. (As with other methods that correspond
to specific functions -- you pay for the dispatch when you prefer a
generic code.)
I'm saying it sounds more like a library procedure than a base language
procedure. I want 'hash-push!' and 'hash-set!/error-if-already-present'
and other hash (or dict) procedures, but I don't think they belong in
scheme/base.
Ryan
On Mar 27, Henk Boom wrote:
If the last argument were a thunk then it would almost make sense to
just call it 'hash-ref!'. That feels like an oxymoron though =).
That *was* my first choice -- but I didn't want that name for a macro.
_________________________________________________
For list-related administrative tasks:
http://list.cs.brown.edu/mailman/listinfo/plt-dev