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. > 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. > 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.) 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. -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://www.barzilay.org/ Maze is Life! _________________________________________________ For list-related administrative tasks: http://list.cs.brown.edu/mailman/listinfo/plt-dev