[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
only.
Jos


  _____  

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.


-- 
http://www.neilvandyke.org/ 

-------------- 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.