bear wrote:
On Wed, 23 Apr 2003, Michael Burschik wrote:It might also be mentioned that the return value is ambiguous with regard to #f, [...]Can you think of a better thing to do in this case?I can think of no elegant solution. Of course, you could always return both the index and the element found.In my hash table library there is an optional third argument to the lookup function. It's the value to return in case you don't find something.
PLT's MzScheme does a similar thing, except passes a failure-thunk instead of a failure-value:
(hash-table-get htable key (lambda () #f))This I guess also permits (raise ...) in a more direct style than fabricating a unique failure-token and then checking for it in the caller:
(hash-table-get htable key (lambda () (raise ...)))
vs.
(let* ((token (cons '() '()))
(val (hash-table-get htable key token)))
(if (eq? val token)
(raise ...)
val))
I think MzScheme also lets that third parameter be optional, defaulting
to (lambda () #f), just as you suggest.
Tony