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

Reply via email to