[racket] hash-ref

From: Jos Koot (jos.koot at telefonica.net)
Date: Sun Jul 18 19:48:01 EDT 2010

I am not sure it is a good idea to add many almost-synonyms in a language. I
just was a little bit curious. The change is backward compatible and I have
no objections against it.
Indeed values to be inserted for missing keys often are #f or 0 or '( ). It
types nicely not having to wrap these basic constants in a thunk and to gain
efficiency for free. You only have to be aware of the fact that if the value
to be inserted is to be or might be a procedure, such as (lambda (x) x) as
the most elementary procedure when building a hash of procedures, you have
to wrap it as (lambda ( ) (lambda (x) x)). Because the latter does not
capture any variables, it may even be optimized such as to avoid multiple
construction of the identity function.
In this case I would write or have my macro or module expand to for example:
(define (identity x) x)
(define (default) identity)
(let loop ((...))
 (hash-ref! hash key default)
I am pretty sure that in this case the identity function is constructed once


From: Neil Van Dyke [mailto:neil at neilvandyke.org] 
Sent: 19 July 2010 00:22
To: Jos Koot
Cc: 'plt-scheme'
Subject: Re: [racket] hash-ref

Jos Koot wrote at 07/18/2010 09:26 AM: 

(hash-ref a-hash a-key a-value)
In the past a-value was required to be a procedure.
Now it can be anything.


In short, I do not well understand the reason to relax the contract of
hash-ref and hash-ref!.

This behavior seems a little on the uncomfortable side of automagical to me,
and -- although I can understand the desire to keep the short name -- I
would've preferred separate procedures for the default-thunk and
default-value variations.

Perhaps the short-name procedure could be the automagical one, and there
could be longer-name procedures, like "hash-ref/default-thunk" and
"hash-ref/default-value", for people who prefer a little less automagic in
that regard.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20100719/f2608176/attachment.html>

Posted on the users mailing list.