[racket] hash-ref

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Sun Jul 18 20:00:28 EDT 2010

I believe that each syntactic occurrence of the identity function is
created separately, but maybe there is a special case for that one.
(You can always use 'values' if you want them to be identical.)

But I believe that only thunks are treated specially, not functions of
one argument.


On Sun, Jul 18, 2010 at 6:48 PM, Jos Koot <jos.koot at telefonica.net> wrote:
> 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/
> _________________________________________________
>  For list-related administrative tasks:
>  http://lists.racket-lang.org/listinfo/users

Posted on the users mailing list.